mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 21:17:30 +00:00
21 lines
256 KiB
JavaScript
21 lines
256 KiB
JavaScript
import{E as Sa}from"./element-plus-BSjV1f9S.js";import{aP as Es,r as A,c as j,q as wt,V as Os,o as Re,x as n,y as o,z as e,I as he,C as F,P as u,R as ne,J as js,L as $,B as Rt,K as _,aq as le,Q as re,ac as ge,u as Ae,T as Gs,a5 as Oe,D as Ma,_ as ut,Y as $e,an as De,O as K,aa as tt,al as Ie,aV as kt,f as bt,aU as Ua}from"./vue-vendor-DV7DYXbz.js";import{r as Ra,t as Va,v as zs,w as Vt,x as Pa,y as qs,z as Ea,A as Oa,_ as st,c as Pe,s as R,B as ja,C as Pt,D as Et,E as Ot,F as jt,G as Gt,H as zt,I as qt,J as Ft,K as Bt,L as Ga,M as za,f as vt,N as qa,O as Fa,P as Ba,Q as Wa,u as Na,R as Ha,S as Ya,T as Qa,U as Ja,V as Xa,W as Za,X as er,Y as tr,Z as rs,$ as sr,a0 as ar,a1 as rr,a2 as or}from"./index-p8cKYBY8.js";import{Q as et}from"./vendor-Dr8jvgFu.js";import{C as at}from"./ConfirmModal-DjOnjOKk.js";import{_ as lr}from"./WindowCountdown-Cz478C_V.js";import{C as Ut,_ as nr}from"./ActionDropdown-DRzr3FOm.js";const Fs=Es("clients",{state:()=>({supportedClients:[],loading:!1,error:null}),actions:{async loadSupportedClients(){if(this.supportedClients.length>0)return this.supportedClients;this.loading=!0;const h=await Ra();return h.success?this.supportedClients=h.data||[]:this.error=h.message,this.loading=!1,this.supportedClients}}}),ls=Es("apiKeys",()=>{const h=A([]),J=A(!1),c=A(null),P=A("all"),Y=A(""),I=A("asc"),z=async()=>{J.value=!0;const G=await Va();G.success?h.value=G.data||[]:c.value=G.message,J.value=!1},S=async G=>{J.value=!0;const ee=await zs(G);return ee.success?await z():c.value=ee.message,J.value=!1,ee},W=async(G,ee)=>{J.value=!0;const te=await Vt(G,ee);return te.success?await z():c.value=te.message,J.value=!1,te};return{apiKeys:h,loading:J,error:c,statsTimeRange:P,sortBy:Y,sortOrder:I,fetchApiKeys:z,createApiKey:S,updateApiKey:W,toggleApiKey:async G=>{J.value=!0;const ee=await Pa(G);return ee.success?await z():c.value=ee.message,J.value=!1,ee},renewApiKey:(G,ee)=>W(G,ee),deleteApiKey:async G=>{J.value=!0;const ee=await qs(G);return ee.success?await z():c.value=ee.message,J.value=!1,ee},fetchApiKeyStats:async(G,ee="all")=>{const te=await Ea(G,{timeRange:ee});return te.success?te.stats:null},fetchTags:async()=>{const G=await Oa();return G.success?G.data||[]:[]},sortApiKeys:G=>{Y.value===G?I.value=I.value==="asc"?"desc":"asc":(Y.value=G,I.value="asc")},reset:()=>{h.value=[],J.value=!1,c.value=null,P.value="all",Y.value="",I.value="asc"}}}),ir={class:"flex-shrink-0 border-b border-gray-200 p-3 dark:border-gray-600"},dr={class:"relative"},ur={class:"custom-scrollbar flex-1 overflow-y-auto"},cr={key:0,class:"border-b border-gray-200 dark:border-gray-600"},gr=["onClick"],pr={class:"text-gray-700 dark:text-gray-300"},mr={key:0,class:"ml-2 text-xs text-gray-400 dark:text-gray-500"},xr={class:"text-gray-700 dark:text-gray-300"},yr={key:1},fr=["onClick"],br={class:"flex items-center justify-between"},vr={class:"text-gray-700 dark:text-gray-300"},kr={class:"text-xs text-gray-500 dark:text-gray-400"},wr={key:2},hr={class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Ar=["onClick"],Cr={class:"flex items-center justify-between"},$r={class:"text-gray-700 dark:text-gray-300"},Ir={class:"text-xs text-gray-400 dark:text-gray-500"},Kr={key:3},Lr=["onClick"],Dr={class:"flex items-center justify-between"},Tr={class:"text-gray-700 dark:text-gray-300"},_r={class:"text-xs text-gray-400 dark:text-gray-500"},Sr={key:4},Mr=["onClick"],Ur={class:"flex items-center justify-between"},Rr={class:"text-gray-700 dark:text-gray-300"},Vr={class:"text-xs text-gray-400 dark:text-gray-500"},Pr={key:5},Er=["onClick"],Or={class:"flex items-center justify-between"},jr={class:"text-gray-700 dark:text-gray-300"},Gr={class:"text-xs text-gray-400 dark:text-gray-500"},zr={key:6,class:"px-4 py-8 text-center text-gray-500 dark:text-gray-400"},qr={__name:"AccountSelector",props:{modelValue:{type:String,default:""},platform:{type:String,required:!0,validator:h=>["claude","gemini","openai","bedrock","droid"].includes(h)},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(h,{emit:J}){const c=h,P=J,Y=A(!1),I=A(""),z=A(null),S=A(null),W=A({}),X=A(null),Q=A(""),v=j(()=>c.specialOptions||[]),L=j(()=>{const d=v.value.find(b=>b.value===c.modelValue);if(d)return d.label;if(!c.modelValue)return c.defaultOptionText;if(c.modelValue.startsWith("group:")){const b=c.modelValue.substring(6),oe=c.groups.find(xe=>xe.id===b);return oe?`${oe.name} (${oe.memberCount||0} 个成员)`:""}if(c.modelValue.startsWith("console:")){const b=c.modelValue.substring(8),oe=c.accounts.find(xe=>xe.id===b&&xe.platform==="claude-console");return oe?`${oe.name} (${f(oe)})`:""}if(c.modelValue.startsWith("responses:")){const b=c.modelValue.substring(10),oe=c.accounts.find(xe=>xe.id===b&&xe.platform==="openai-responses");return oe?`${oe.name} (${f(oe)})`:""}if(c.modelValue.startsWith("api:")){const b=c.modelValue.substring(4),oe=c.accounts.find(xe=>xe.id===b&&xe.platform==="gemini-api");return oe?`${oe.name} (${f(oe)})`:""}const p=c.accounts.find(b=>b.id===c.modelValue);return p?`${p.name} (${f(p)})`:""}),f=d=>{if(!d)return"未知";if(!(d.isActive==="true"||d.isActive===!0))switch(d.status){case"unauthorized":return"未授权";case"error":return"Token错误";case"created":return"待验证";case"rate_limited":return"限流中";case"quota_exceeded":return"额度超限";default:return"异常"}return d.status==="rate_limited"?"限流中":"正常"},M=j(()=>[...c.accounts].sort((d,p)=>{const b=new Date(d.createdAt||0);return new Date(p.createdAt||0)-b})),se=j(()=>{let d=c.groups.filter(p=>p.platform?p.platform===c.platform:!0);if(I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),G=j(()=>{let d=[];if(c.platform==="claude"?d=M.value.filter(p=>p.platform==="claude-oauth"):c.platform==="openai"?d=M.value.filter(p=>p.platform==="openai"):c.platform==="droid"?d=M.value.filter(p=>p.platform==="droid"):c.platform==="gemini"?d=M.value.filter(p=>p.platform==="gemini"):d=M.value.filter(p=>!["claude-oauth","claude-console","openai-responses","gemini-api"].includes(p.platform)),I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),ee=j(()=>{if(c.platform!=="claude")return[];let d=M.value.filter(p=>p.platform==="claude-console");if(I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),te=j(()=>{if(c.platform!=="openai")return[];let d=M.value.filter(p=>p.platform==="openai-responses");if(I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),H=j(()=>{if(c.platform!=="gemini")return[];let d=M.value.filter(p=>p.platform==="gemini-api");if(I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),C=j(()=>se.value.length>0||G.value.length>0||ee.value.length>0||te.value.length>0||H.value.length>0),T=()=>{if(!Y.value||!S.value||!X.value)return;const d=X.value;if(!d)return;const p=d.getBoundingClientRect(),b=window.innerHeight,oe=window.innerWidth,xe=b-p.bottom,Te=p.top,Ce=8,N=xe-Ce,i=Te-Ce;let k=!1,ie=N;Q.value==="above"&&i>=150?(k=!0,ie=i):Q.value==="below"&&N>=150?(k=!1,ie=N):i>N&&N<200&&(k=!0,ie=i),Q.value=k?"above":"below";let ae=p.left;const E=p.width;ae+E>oe-Ce&&(ae=oe-E-Ce),ae<Ce&&(ae=Ce),W.value={position:"fixed",left:`${ae}px`,width:`${p.width}px`,maxHeight:`${Math.min(ie,400)}px`,...k?{bottom:`${b-p.top}px`}:{top:`${p.bottom}px`}}},a=()=>{if(!Y.value&&X.value){const d=X.value.getBoundingClientRect(),b=window.innerHeight-d.bottom,oe=8;W.value={position:"fixed",left:`${d.left}px`,width:`${d.width}px`,maxHeight:`${Math.min(b-oe,400)}px`,top:`${d.bottom}px`}}Y.value=!Y.value,Y.value&&Ma(()=>{var d;T(),(d=z.value)==null||d.focus()})},Z=d=>{P("update:modelValue",d||""),Y.value=!1,I.value=""},V=()=>{},D=()=>{var d;I.value="",(d=z.value)==null||d.focus()},U=d=>{var p,b;!((p=X.value)!=null&&p.contains(d.target))&&!((b=S.value)!=null&&b.contains(d.target))&&(Y.value=!1)},x=()=>{Y.value&&T()};return wt(()=>{document.addEventListener("click",U),window.addEventListener("scroll",x,!0),window.addEventListener("resize",T)}),Os(()=>{document.removeEventListener("click",U),window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",T)}),Re(Y,d=>{d||(I.value="",Q.value="")}),(d,p)=>(o(),n("div",{ref_key:"triggerRef",ref:X,class:"relative"},[e("div",{class:F(["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":h.disabled}]),onClick:p[0]||(p[0]=b=>!h.disabled&&a())},[e("span",{class:F(h.modelValue?"text-gray-900 dark:text-gray-200":"text-gray-500 dark:text-gray-400")},u(L.value),3),e("i",{class:F(["fas fa-chevron-down text-gray-400 transition-transform duration-200 dark:text-gray-500",{"rotate-180":Y.value}])},null,2)],2),(o(),he(Oe,{to:"body"},[ne(Gs,{"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:js(()=>[Y.value?(o(),n("div",{key:0,ref_key:"dropdownRef",ref:S,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:Rt(W.value)},[e("div",ir,[e("div",dr,[_(e("input",{ref_key:"searchInput",ref:z,"onUpdate:modelValue":p[1]||(p[1]=b=>I.value=b),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:V},null,544),[[le,I.value]]),p[4]||(p[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)),I.value?(o(),n("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:D},p[3]||(p[3]=[e("i",{class:"fas fa-times text-sm"},null,-1)]))):$("",!0)])]),e("div",ur,[v.value.length>0?(o(),n("div",cr,[(o(!0),n(re,null,ge(v.value,b=>(o(),n("div",{key:`special-${b.value}`,class:F(["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":h.modelValue===b.value}]),onClick:oe=>Z(b.value)},[e("span",pr,u(b.label),1),b.description?(o(),n("span",mr,u(b.description),1)):$("",!0)],10,gr))),128))])):$("",!0),e("div",{class:F(["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":!h.modelValue}]),onClick:p[2]||(p[2]=b=>Z(null))},[e("span",xr,u(h.defaultOptionText),1)],2),se.value.length>0?(o(),n("div",yr,[p[5]||(p[5]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," 调度分组 ",-1)),(o(!0),n(re,null,ge(se.value,b=>(o(),n("div",{key:`group:${b.id}`,class:F(["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":h.modelValue===`group:${b.id}`}]),onClick:oe=>Z(`group:${b.id}`)},[e("div",br,[e("span",vr,u(b.name),1),e("span",kr,u(b.memberCount||0)+" 个成员",1)])],10,fr))),128))])):$("",!0),G.value.length>0?(o(),n("div",wr,[e("div",hr,u(h.platform==="claude"?"Claude OAuth 专属账号":h.platform==="openai"?"OpenAI 专属账号":h.platform==="droid"?"Droid 专属账号":h.platform==="gemini"?"Gemini OAuth 专属账号":"OAuth 专属账号"),1),(o(!0),n(re,null,ge(G.value,b=>(o(),n("div",{key:b.id,class:F(["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":h.modelValue===b.id}]),onClick:oe=>Z(b.id)},[e("div",Cr,[e("div",null,[e("span",$r,u(b.name),1),e("span",{class:F(["ml-2 rounded-full px-2 py-0.5 text-xs",b.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":b.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(f(b)),3)]),e("span",Ir,u(Ae(Pe)(b.createdAt)),1)])],10,Ar))),128))])):$("",!0),h.platform==="claude"&&ee.value.length>0?(o(),n("div",Kr,[p[6]||(p[6]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Claude Console 专属账号 ",-1)),(o(!0),n(re,null,ge(ee.value,b=>(o(),n("div",{key:b.id,class:F(["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":h.modelValue===`console:${b.id}`}]),onClick:oe=>Z(`console:${b.id}`)},[e("div",Dr,[e("div",null,[e("span",Tr,u(b.name),1),e("span",{class:F(["ml-2 rounded-full px-2 py-0.5 text-xs",b.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":b.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(f(b)),3)]),e("span",_r,u(Ae(Pe)(b.createdAt)),1)])],10,Lr))),128))])):$("",!0),h.platform==="openai"&&te.value.length>0?(o(),n("div",Sr,[p[7]||(p[7]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," OpenAI-Responses 专属账号 ",-1)),(o(!0),n(re,null,ge(te.value,b=>(o(),n("div",{key:b.id,class:F(["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":h.modelValue===`responses:${b.id}`}]),onClick:oe=>Z(`responses:${b.id}`)},[e("div",Ur,[e("div",null,[e("span",Rr,u(b.name),1),e("span",{class:F(["ml-2 rounded-full px-2 py-0.5 text-xs",b.isActive==="true"||b.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":b.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(f(b)),3)]),e("span",Vr,u(Ae(Pe)(b.createdAt)),1)])],10,Mr))),128))])):$("",!0),h.platform==="gemini"&&H.value.length>0?(o(),n("div",Pr,[p[8]||(p[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)),(o(!0),n(re,null,ge(H.value,b=>(o(),n("div",{key:b.id,class:F(["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":h.modelValue===`api:${b.id}`}]),onClick:oe=>Z(`api:${b.id}`)},[e("div",Or,[e("div",null,[e("span",jr,u(b.name),1),e("span",{class:F(["ml-2 rounded-full px-2 py-0.5 text-xs",b.isActive==="true"||b.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":b.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(f(b)),3)]),e("span",Gr,u(Ae(Pe)(b.createdAt)),1)])],10,Er))),128))])):$("",!0),I.value&&!C.value?(o(),n("div",zr,p[9]||(p[9]=[e("i",{class:"fas fa-search mb-2 text-2xl"},null,-1),e("p",{class:"text-sm"},"没有找到匹配的账号",-1)]))):$("",!0)])],4)):$("",!0)]),_:1})]))],512))}},_e=st(qr,[["__scopeId","data-v-15b77cd6"]]),Fr={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Br={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6"},Wr={class:"mb-4 flex items-center justify-between"},Nr={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"},Hr={class:"flex items-center gap-3 sm:gap-4"},Yr={class:"flex cursor-pointer items-center"},Qr={class:"flex cursor-pointer items-center"},Jr={key:0,class:"mt-3"},Xr={class:"flex items-center gap-4"},Zr={class:"flex-1"},eo={class:"flex items-center gap-2"},to={class:"mt-2 flex items-start text-xs text-amber-600 dark:text-amber-400"},so=["placeholder"],ao={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},ro={class:"space-y-4"},oo={key:0},lo={class:"flex flex-wrap gap-2"},no=["onClick"],io={key:1},uo={class:"flex flex-wrap gap-2"},co=["onClick"],go={class:"flex gap-2"},po=["onKeypress"],mo={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},xo={class:"space-y-2"},yo={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},fo={class:"space-y-2"},bo={class:"flex gap-2"},vo={class:"space-y-2"},ko={class:"flex gap-2"},wo={class:"space-y-2"},ho={class:"flex gap-2"},Ao={class:"rounded-lg border border-purple-200 bg-gradient-to-r from-purple-50 to-indigo-50 p-3 dark:border-purple-700 dark:from-purple-900/20 dark:to-indigo-900/20 sm:p-4"},Co={class:"flex items-center justify-between"},$o={class:"flex items-center gap-2"},Io={key:0,class:"mt-3 space-y-2"},Ko={class:"w-20 text-xs text-gray-600 dark:text-gray-400"},Lo=["onUpdate:modelValue"],Do={class:"mb-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},To={class:"flex items-center gap-4"},_o={class:"flex cursor-pointer items-center"},So={class:"flex cursor-pointer items-center"},Mo={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Uo={key:0},Ro={key:1},Vo={key:0},Po={key:0,class:"mt-3"},Eo=["min"],Oo={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},jo={key:1},Go={class:"flex items-center gap-2"},zo=["max","placeholder"],qo={class:"mt-2 flex flex-wrap gap-2"},Fo=["onClick"],Bo={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Wo={class:"flex flex-wrap gap-4"},No={class:"flex cursor-pointer items-center"},Ho={class:"flex cursor-pointer items-center"},Yo={class:"flex cursor-pointer items-center"},Qo={class:"flex cursor-pointer items-center"},Jo={class:"mb-2 flex items-center justify-between"},Xo=["disabled"],Zo={class:"grid grid-cols-1 gap-3"},el={class:"mb-2 flex items-center"},tl={key:0,class:"space-y-3"},sl={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2"},al=["onClick"],rl={key:0,class:"text-sm text-gray-400"},ol={class:"space-y-3"},ll={class:"flex flex-wrap gap-2"},nl=["onClick"],il={key:0,class:"text-sm italic text-gray-400"},dl={class:"flex gap-2"},ul=["onKeydown"],cl={class:"mb-2 flex items-center"},gl={key:0,class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/20"},pl={class:"space-y-1"},ml=["id","value"],xl=["for"],yl={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},fl={class:"block text-xs text-gray-500 dark:text-gray-400"},bl={class:"flex gap-3 pt-2"},vl=["disabled"],kl={key:0,class:"loading-spinner mr-2"},wl={key:1,class:"fas fa-plus mr-2"},hl={__name:"CreateApiKeyModal",props:{accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success","batch-success"],setup(h,{emit:J}){const c=h,P=J,Y=Fs(),I=ls(),z=A(!1),S=A(!1),W=A(!1),X=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),Q=A(null),v=(E,l,y="确认",de="取消",Ue="primary")=>new Promise(Se=>{X.value={title:E,message:l,confirmText:y,cancelText:de,type:Ue},Q.value=Se,W.value=!0}),L=()=>{var E;W.value=!1,(E=Q.value)==null||E.call(Q,!0)},f=()=>{var E;W.value=!1,(E=Q.value)==null||E.call(Q,!1)},M=A({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),se=A({name:""}),G=A(""),ee=A([]),te=j(()=>ee.value.filter(E=>!a.tags.includes(E))),H=A([]),C=A(!1),T=[{key:"claude",label:"Claude"},{key:"gemini",label:"Gemini"},{key:"codex",label:"Codex"},{key:"droid",label:"Droid"},{key:"bedrock",label:"Bedrock"},{key:"azure",label:"Azure"},{key:"ccr",label:"CCR"}],a=ut({createType:"single",batchCount:10,name:"",description:"",serviceRates:{},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:[]}),Z=()=>{};wt(async()=>{if(H.value=await Y.loadSupportedClients(),ee.value=await I.fetchTags(),c.accounts){const E=(c.accounts.gemini||[]).map(y=>({...y,platform:y.platform||"gemini"})),l=[];c.accounts.openai&&c.accounts.openai.forEach(y=>{l.push({...y,platform:y.platform||"openai"})}),c.accounts.openaiResponses&&c.accounts.openaiResponses.forEach(y=>{l.push({...y,platform:y.platform||"openai-responses"})}),M.value={claude:c.accounts.claude||[],gemini:E,openai:l,bedrock:c.accounts.bedrock||[],droid:(c.accounts.droid||[]).map(y=>({...y,platform:y.platform||"droid"})),claudeGroups:c.accounts.claudeGroups||[],geminiGroups:c.accounts.geminiGroups||[],openaiGroups:c.accounts.openaiGroups||[],droidGroups:c.accounts.droidGroups||[]}}});const V=async()=>{var E,l;S.value=!0;try{const[y,de,Ue,Se,Be,ye,Qe,ce,Ve]=await Promise.all([Pt(),Et(),Ot(),jt(),Gt(),zt(),qt(),Ft(),Bt()]),ze=[];y.success&&((E=y.data)==null||E.forEach(pe=>{ze.push({...pe,platform:"claude-oauth",isDedicated:pe.accountType==="dedicated"})})),de.success&&((l=de.data)==null||l.forEach(pe=>{ze.push({...pe,platform:"claude-console",isDedicated:pe.accountType==="dedicated"})})),M.value.claude=ze;const We=[];Ue.success&&(Ue.data||[]).forEach(pe=>{We.push({...pe,platform:"gemini",isDedicated:pe.accountType==="dedicated"})}),Se.success&&(Se.data||[]).forEach(pe=>{We.push({...pe,platform:"gemini-api",isDedicated:pe.accountType==="dedicated"})}),M.value.gemini=We;const Ne=[];if(Be.success&&(Be.data||[]).forEach(pe=>{Ne.push({...pe,platform:"openai",isDedicated:pe.accountType==="dedicated"})}),ye.success&&(ye.data||[]).forEach(pe=>{Ne.push({...pe,platform:"openai-responses",isDedicated:pe.accountType==="dedicated"})}),M.value.openai=Ne,Qe.success&&(M.value.bedrock=(Qe.data||[]).map(pe=>({...pe,isDedicated:pe.accountType==="dedicated"}))),ce.success&&(M.value.droid=(ce.data||[]).map(pe=>({...pe,platform:"droid",isDedicated:pe.accountType==="dedicated"}))),Ve.success){const pe=Ve.data||[];M.value.claudeGroups=pe.filter(Ee=>Ee.platform==="claude"),M.value.geminiGroups=pe.filter(Ee=>Ee.platform==="gemini"),M.value.openaiGroups=pe.filter(Ee=>Ee.platform==="openai"),M.value.droidGroups=pe.filter(Ee=>Ee.platform==="droid")}R("账号列表已刷新","success")}catch{R("刷新账号列表失败","error")}finally{S.value=!1}},D=j(()=>{const E=new Date;return E.setMinutes(E.getMinutes()+1),E.toISOString().slice(0,16)}),U=()=>{if(!a.expireDuration){a.expiresAt=null;return}if(a.expireDuration==="custom")return;const E=new Date,y=a.expireDuration.match(/(\d+)([dhmy])/);if(y){const[,de,Ue]=y,Se=parseInt(de);switch(Ue){case"d":E.setDate(E.getDate()+Se);break;case"h":E.setHours(E.getHours()+Se);break;case"m":E.setMonth(E.getMonth()+Se);break;case"y":E.setFullYear(E.getFullYear()+Se);break}a.expiresAt=E.toISOString()}},x=()=>{a.customExpireDate&&(a.expiresAt=new Date(a.customExpireDate).toISOString())},d=E=>new Date(E).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),p=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},b=E=>{a.restrictedModels.splice(E,1)},oe=A(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),xe=j(()=>oe.value.filter(E=>!a.restrictedModels.includes(E))),Te=E=>{a.restrictedModels.includes(E)||a.restrictedModels.push(E)},Ce=()=>{if(G.value&&G.value.trim()){const E=G.value.trim();a.tags.includes(E)||a.tags.push(E),G.value=""}},N=E=>{a.tags.includes(E)||a.tags.push(E)},i=E=>{a.tags.splice(E,1)},k=()=>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天"}],ie=()=>{a.activationUnit==="hours"?a.activationDays>24&&(a.activationDays=24):a.activationDays<1&&(a.activationDays=1)},ae=async()=>{if(se.value.name="",!a.name||!a.name.trim()){se.value.name="请输入API Key名称";return}if(a.createType==="batch"&&(!a.batchCount||a.batchCount<2||a.batchCount>500)){R("批量创建数量必须在 2-500 之间","error");return}if(!(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)&&!await v("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
|
||
|
||
是否继续?`,"继续创建","返回修改","warning"))){z.value=!0;try{const E={};if(C.value)for(const[y,de]of Object.entries(a.serviceRates))de!=null&&de!==""&&(E[y]=de);const l={description:a.description||void 0,serviceRates:E,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:")?(l.claudeConsoleAccountId=a.claudeAccountId.substring(8),delete l.claudeAccountId):(l.claudeAccountId=a.claudeAccountId,delete l.claudeConsoleAccountId)),a.geminiAccountId&&(l.geminiAccountId=a.geminiAccountId),a.openaiAccountId&&(l.openaiAccountId=a.openaiAccountId),a.bedrockAccountId&&(l.bedrockAccountId=a.bedrockAccountId),a.droidAccountId&&(l.droidAccountId=a.droidAccountId),a.createType==="single"){const y={...l,name:a.name},de=await zs(y);de.success?(R("API Key 创建成功","success"),P("success",de.data),P("close")):R(de.message||"创建失败","error")}else{const y={...l,createType:"batch",baseName:a.name,count:a.batchCount},de=await ja(y);de.success?(R(`成功创建 ${de.data.length} 个 API Key`,"success"),P("batch-success",de.data),P("close")):R(de.message||"批量创建失败","error")}}catch{R("创建失败","error")}finally{z.value=!1}}};return(E,l)=>(o(),he(Oe,{to:"body"},[e("div",Fr,[e("div",Br,[e("div",Wr,[l[49]||(l[49]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 创建新的 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:l[0]||(l[0]=y=>E.$emit("close"))},l[48]||(l[48]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4",onSubmit:$e(ae,["prevent"])},[e("div",Nr,[e("div",{class:F(["flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",a.createType==="batch"?"mb-3":""])},[l[52]||(l[52]=e("label",{class:"flex h-full items-center text-xs font-semibold text-gray-700 dark:text-gray-300 sm:text-sm"},"创建类型",-1)),e("div",Hr,[e("label",Yr,[_(e("input",{"onUpdate:modelValue":l[1]||(l[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),[[De,a.createType]]),l[50]||(l[50]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-key mr-1 text-xs"}),K(" 单个创建 ")],-1))]),e("label",Qr,[_(e("input",{"onUpdate:modelValue":l[2]||(l[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),[[De,a.createType]]),l[51]||(l[51]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-layer-group mr-1 text-xs"}),K(" 批量创建 ")],-1))])])],2),a.createType==="batch"?(o(),n("div",Jr,[e("div",Xr,[e("div",Zr,[l[54]||(l[54]=e("label",{class:"mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400"},"创建数量",-1)),e("div",eo,[_(e("input",{"onUpdate:modelValue":l[3]||(l[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),[[le,a.batchCount,void 0,{number:!0}]]),l[53]||(l[53]=e("div",{class:"whitespace-nowrap text-xs text-gray-500 dark:text-gray-400"}," 最大支持 500 个 ",-1))])])]),e("p",to,[l[55]||(l[55]=e("i",{class:"fas fa-info-circle mr-1 mt-0.5 flex-shrink-0"},null,-1)),e("span",null,"批量创建时,每个 Key 的名称会自动添加序号后缀,例如:"+u(a.name||"MyKey")+"_1, "+u(a.name||"MyKey")+"_2 ...",1)])])):$("",!0)]),e("div",null,[l[56]||(l[56]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-2 sm:text-sm"},[K("名称 "),e("span",{class:"text-red-500"},"*")],-1)),e("div",null,[_(e("input",{"onUpdate:modelValue":l[4]||(l[4]=y=>a.name=y),class:F(["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":se.value.name}]),placeholder:a.createType==="batch"?"输入基础名称(将自动添加序号)":"为您的 API Key 取一个名称",required:"",type:"text",onInput:l[5]||(l[5]=y=>se.value.name="")},null,42,so),[[le,a.name]])]),se.value.name?(o(),n("p",ao,u(se.value.name),1)):$("",!0)]),e("div",null,[l[64]||(l[64]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"标签",-1)),e("div",ro,[a.tags.length>0?(o(),n("div",oo,[l[58]||(l[58]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",lo,[(o(!0),n(re,null,ge(a.tags,(y,de)=>(o(),n("span",{key:"selected-"+de,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"},[K(u(y)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:Ue=>i(de)},l[57]||(l[57]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,no)]))),128))])])):$("",!0),te.value.length>0?(o(),n("div",io,[l[60]||(l[60]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",uo,[(o(!0),n(re,null,ge(te.value,y=>(o(),n("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:de=>N(y)},[l[59]||(l[59]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),K(" "+u(y),1)],8,co))),128))])])):$("",!0),e("div",null,[l[62]||(l[62]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",go,[_(e("input",{"onUpdate:modelValue":l[6]||(l[6]=y=>G.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:tt($e(Ce,["prevent"]),["enter"])},null,40,po),[[le,G.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:Ce},l[61]||(l[61]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[63]||(l[63]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",mo,[l[72]||(l[72]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",xo,[e("div",yo,[e("div",null,[l[65]||(l[65]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),_(e("input",{"onUpdate:modelValue":l[7]||(l[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),[[le,a.rateLimitWindow]]),l[66]||(l[66]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[l[67]||(l[67]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),_(e("input",{"onUpdate:modelValue":l[8]||(l[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),[[le,a.rateLimitRequests]]),l[68]||(l[68]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[l[69]||(l[69]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),_(e("input",{"onUpdate:modelValue":l[9]||(l[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),[[le,a.rateLimitCost]]),l[70]||(l[70]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),l[71]||(l[71]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),K(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),K(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),K(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[l[74]||(l[74]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",fo,[e("div",bo,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[10]||(l[10]=y=>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:l[11]||(l[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:l[12]||(l[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:l[13]||(l[13]=y=>a.dailyCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":l[14]||(l[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),[[le,a.dailyCostLimit]]),l[73]||(l[73]=e("p",{class:"dark:text灰-400 text-xs text-gray-500"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[76]||(l[76]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",vo,[e("div",ko,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[15]||(l[15]=y=>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:l[16]||(l[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:l[17]||(l[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:l[18]||(l[18]=y=>a.totalCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":l[19]||(l[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),[[le,a.totalCostLimit]]),l[75]||(l[75]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[78]||(l[78]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Claude 模型周费用限制 (美元)",-1)),e("div",wo,[e("div",ho,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[20]||(l[20]=y=>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:l[21]||(l[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:l[22]||(l[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:l[23]||(l[23]=y=>a.weeklyOpusCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":l[24]||(l[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),[[le,a.weeklyOpusCostLimit]]),l[77]||(l[77]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效,0 或留空表示无限制 ",-1))])]),e("div",null,[l[79]||(l[79]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制 (可选)",-1)),_(e("input",{"onUpdate:modelValue":l[25]||(l[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),[[le,a.concurrencyLimit]]),l[80]||(l[80]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数,0 或留空表示无限制 ",-1))]),e("div",null,[l[81]||(l[81]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注 (可选)",-1)),_(e("textarea",{"onUpdate:modelValue":l[26]||(l[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),[[le,a.description]])]),e("div",Ao,[e("div",Co,[e("div",$o,[_(e("input",{id:"enableServiceRates","onUpdate:modelValue":l[27]||(l[27]=y=>C.value=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-purple-600 focus:ring-purple-500",type:"checkbox"},null,512),[[Ie,C.value]]),l[82]||(l[82]=e("label",{class:"cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableServiceRates"}," 自定义服务倍率 ",-1))]),l[83]||(l[83]=e("span",{class:"text-xs text-gray-500 dark:text-gray-400"}," 与全局倍率相乘,用于 VIP 折扣等(如全局1.5 × Key倍率0.8 = 1.2) ",-1))]),C.value?(o(),n("div",Io,[(o(),n(re,null,ge(T,y=>e("div",{key:y.key,class:"flex items-center gap-2"},[e("span",Ko,u(y.label),1),_(e("input",{"onUpdate:modelValue":de=>a.serviceRates[y.key]=de,class:"form-input w-24 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"1.0",step:"0.1",type:"number"},null,8,Lo),[[le,a.serviceRates[y.key],void 0,{number:!0}]]),l[84]||(l[84]=e("span",{class:"text-xs text-gray-400"},"默认 1.0",-1))])),64))])):$("",!0)]),e("div",null,[l[92]||(l[92]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"过期设置",-1)),e("div",Do,[e("div",To,[e("label",_o,[_(e("input",{"onUpdate:modelValue":l[28]||(l[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:"fixed"},null,512),[[De,a.expirationMode]]),l[85]||(l[85]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"固定时间过期",-1))]),e("label",So,[_(e("input",{"onUpdate:modelValue":l[29]||(l[29]=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),[[De,a.expirationMode]]),l[86]||(l[86]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"首次使用后激活",-1))])]),e("p",Mo,[a.expirationMode==="fixed"?(o(),n("span",Uo,l[87]||(l[87]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),K(" 固定时间模式:Key 创建后立即生效,按设定时间过期(支持小时和天数) ",-1)]))):(o(),n("span",Ro,l[88]||(l[88]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),K(" 激活模式:Key 首次使用时激活,激活后按设定时间过期(支持小时和天数,适合批量销售) ",-1)])))])]),a.expirationMode==="fixed"?(o(),n("div",Vo,[_(e("select",{"onUpdate:modelValue":l[30]||(l[30]=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:U},l[89]||(l[89]=[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),[[kt,a.expireDuration]]),a.expireDuration==="custom"?(o(),n("div",Po,[_(e("input",{"onUpdate:modelValue":l[31]||(l[31]=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:D.value,type:"datetime-local",onChange:x},null,40,Eo),[[le,a.customExpireDate]])])):$("",!0),a.expiresAt?(o(),n("p",Oo," 将于 "+u(d(a.expiresAt))+" 过期 ",1)):$("",!0)])):(o(),n("div",jo,[e("div",Go,[_(e("input",{"onUpdate:modelValue":l[32]||(l[32]=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,zo),[[le,a.activationDays,void 0,{number:!0}]]),_(e("select",{"onUpdate:modelValue":l[33]||(l[33]=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:ie},l[90]||(l[90]=[e("option",{value:"hours"},"小时",-1),e("option",{value:"days"},"天",-1)]),544),[[kt,a.activationUnit]])]),e("div",qo,[(o(!0),n(re,null,ge(k(),y=>(o(),n("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:de=>a.activationDays=y.value},u(y.label),9,Fo))),128))]),e("p",Bo,[l[91]||(l[91]=e("i",{class:"fas fa-clock mr-1"},null,-1)),K(" Key 将在首次使用后激活,激活后 "+u(a.activationDays||(a.activationUnit==="hours"?24:30))+" "+u(a.activationUnit==="hours"?"小时":"天")+"过期 ",1)])]))]),e("div",null,[l[97]||(l[97]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Wo,[e("label",No,[_(e("input",{"onUpdate:modelValue":l[34]||(l[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:"claude",onChange:Z},null,544),[[Ie,a.permissions]]),l[93]||(l[93]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",Ho,[_(e("input",{"onUpdate:modelValue":l[35]||(l[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:"gemini",onChange:Z},null,544),[[Ie,a.permissions]]),l[94]||(l[94]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",Yo,[_(e("input",{"onUpdate:modelValue":l[36]||(l[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:"openai",onChange:Z},null,544),[[Ie,a.permissions]]),l[95]||(l[95]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",Qo,[_(e("input",{"onUpdate:modelValue":l[37]||(l[37]=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",onChange:Z},null,544),[[Ie,a.permissions]]),l[96]||(l[96]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),l[98]||(l[98]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",Jo,[l[99]||(l[99]=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:S.value,title:"刷新账号列表",type:"button",onClick:V},[e("i",{class:F(["fas",S.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,u(S.value?"刷新中...":"刷新账号"),1)],8,Xo)]),e("div",Zo,[e("div",null,[l[100]||(l[100]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ne(_e,{modelValue:a.claudeAccountId,"onUpdate:modelValue":l[38]||(l[38]=y=>a.claudeAccountId=y),accounts:M.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:M.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[101]||(l[101]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ne(_e,{modelValue:a.geminiAccountId,"onUpdate:modelValue":l[39]||(l[39]=y=>a.geminiAccountId=y),accounts:M.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:M.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[102]||(l[102]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ne(_e,{modelValue:a.openaiAccountId,"onUpdate:modelValue":l[40]||(l[40]=y=>a.openaiAccountId=y),accounts:M.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:M.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[103]||(l[103]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ne(_e,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":l[41]||(l[41]=y=>a.bedrockAccountId=y),accounts:M.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[104]||(l[104]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ne(_e,{modelValue:a.droidAccountId,"onUpdate:modelValue":l[42]||(l[42]=y=>a.droidAccountId=y),accounts:M.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:M.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),l[105]||(l[105]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择专属账号后,此API Key将只使用该账号,不选择则使用共享账号池 ",-1))]),e("div",null,[e("div",el,[_(e("input",{id:"enableModelRestriction","onUpdate:modelValue":l[43]||(l[43]=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),[[Ie,a.enableModelRestriction]]),l[106]||(l[106]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(o(),n("div",tl,[e("div",null,[l[109]||(l[109]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600"},"限制的模型列表",-1)),e("div",sl,[(o(!0),n(re,null,ge(a.restrictedModels,(y,de)=>(o(),n("span",{key:de,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800"},[K(u(y)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800",type:"button",onClick:Ue=>b(de)},l[107]||(l[107]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,al)]))),128)),a.restrictedModels.length===0?(o(),n("span",rl," 暂无限制的模型 ")):$("",!0)]),e("div",ol,[e("div",ll,[(o(!0),n(re,null,ge(xe.value,y=>(o(),n("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:de=>Te(y)},u(y),9,nl))),128)),xe.value.length===0?(o(),n("span",il," 所有常用模型已在限制列表中 ")):$("",!0)]),e("div",dl,[_(e("input",{"onUpdate:modelValue":l[44]||(l[44]=y=>a.modelInput=y),class:"form-input flex-1",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:tt($e(p,["prevent"]),["enter"])},null,40,ul),[[le,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:p},l[108]||(l[108]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[110]||(l[110]=e("p",{class:"mt-2 text-xs text-gray-500"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):$("",!0)]),e("div",null,[e("div",cl,[_(e("input",{id:"enableClientRestriction","onUpdate:modelValue":l[45]||(l[45]=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),[[Ie,a.enableClientRestriction]]),l[111]||(l[111]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(o(),n("div",gl,[e("div",null,[l[112]||(l[112]=e("label",{class:"mb-2 block text-xs font-medium text-gray-700 dark:text-gray-300"},"允许的客户端",-1)),e("div",pl,[(o(!0),n(re,null,ge(H.value,y=>(o(),n("div",{key:y.id,class:"flex items-start"},[_(e("input",{id:`client_${y.id}`,"onUpdate:modelValue":l[46]||(l[46]=de=>a.allowedClients=de),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,ml),[[Ie,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`client_${y.id}`},[e("span",yl,u(y.name),1),e("span",fl,u(y.description),1)],8,xl)]))),128))])])])):$("",!0)]),e("div",bl,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 text-sm font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[47]||(l[47]=y=>E.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 text-sm font-semibold",disabled:z.value,type:"submit"},[z.value?(o(),n("div",kl)):(o(),n("i",wl)),K(" "+u(z.value?"创建中...":"创建"),1)],8,vl)])],32)])]),ne(at,{"cancel-text":X.value.cancelText,"confirm-text":X.value.confirmText,message:X.value.message,show:W.value,title:X.value.title,type:X.value.type,onCancel:f,onConfirm:L},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},Al={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Cl={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},$l={class:"mb-4 flex items-center justify-between sm:mb-6"},Il={class:"rounded-lg border border-purple-200 bg-gradient-to-r from-purple-50 to-indigo-50 p-3 dark:border-purple-700 dark:from-purple-900/20 dark:to-indigo-900/20 sm:p-4"},Kl={class:"flex items-center justify-between"},Ll={class:"flex items-center gap-2"},Dl={key:0,class:"mt-3 space-y-2"},Tl={class:"w-20 text-xs text-gray-600 dark:text-gray-400"},_l=["onUpdate:modelValue"],Sl=["value"],Ml={key:0,class:"text-gray-500"},Ul={class:"space-y-4"},Rl={key:0},Vl={class:"flex flex-wrap gap-2"},Pl=["onClick"],El={key:1},Ol={class:"flex flex-wrap gap-2"},jl=["onClick"],Gl={class:"flex gap-2"},zl=["onKeypress"],ql={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},Fl={class:"space-y-2"},Bl={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Wl={class:"space-y-3"},Nl={class:"flex gap-2"},Hl={class:"space-y-3"},Yl={class:"flex gap-2"},Ql={class:"space-y-3"},Jl={class:"flex gap-2"},Xl={class:"mb-3 flex items-center"},Zl={class:"flex flex-wrap gap-4"},en={class:"flex cursor-pointer items-center"},tn={class:"flex cursor-pointer items-center"},sn={class:"flex cursor-pointer items-center"},an={class:"flex cursor-pointer items-center"},rn={class:"mb-3 flex items-center justify-between"},on=["disabled"],ln={class:"grid grid-cols-1 gap-3"},nn={class:"mb-3 flex items-center"},dn={key:0,class:"space-y-3"},un={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"},cn=["onClick"],gn={key:0,class:"text-sm text-gray-400 dark:text-gray-500"},pn={class:"space-y-3"},mn={class:"flex flex-wrap gap-2"},xn=["onClick"],yn={key:0,class:"text-sm italic text-gray-400 dark:text-gray-500"},fn={class:"flex gap-2"},bn=["onKeydown"],vn={class:"mb-3 flex items-center"},kn={key:0,class:"space-y-3"},wn={class:"space-y-2"},hn=["id","value"],An=["for"],Cn={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},$n={class:"block text-xs text-gray-500 dark:text-gray-400"},In={class:"flex gap-3 pt-4"},Kn=["disabled"],Ln={key:0,class:"loading-spinner mr-2"},Dn={key:1,class:"fas fa-save mr-2"},Tn={__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(h,{emit:J}){const c=h,P=J,Y=Fs(),I=ls(),z=A(!1),S=A(!1),W=A(!1),X=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),Q=A(null),v=(N,i,k="确认",ie="取消",ae="primary")=>new Promise(E=>{X.value={title:N,message:i,confirmText:k,cancelText:ie,type:ae},Q.value=E,W.value=!0}),L=()=>{var N;W.value=!1,(N=Q.value)==null||N.call(Q,!0)},f=()=>{var N;W.value=!1,(N=Q.value)==null||N.call(Q,!1)},M=A({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),se=A([]),G=A([]),ee=A(""),te=A([]),H=j(()=>te.value.filter(N=>!a.tags.includes(N))),C=A(!1),T=[{key:"claude",label:"Claude"},{key:"gemini",label:"Gemini"},{key:"codex",label:"Codex"},{key:"droid",label:"Droid"},{key:"bedrock",label:"Bedrock"},{key:"azure",label:"Azure"},{key:"ccr",label:"CCR"}],a=ut({name:"",serviceRates:{},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=()=>{},V=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},D=N=>{a.restrictedModels.splice(N,1)},U=A(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),x=j(()=>U.value.filter(N=>!a.restrictedModels.includes(N))),d=N=>{a.restrictedModels.includes(N)||a.restrictedModels.push(N)},p=()=>{if(ee.value&&ee.value.trim()){const N=ee.value.trim();a.tags.includes(N)||a.tags.push(N),ee.value=""}},b=N=>{a.tags.includes(N)||a.tags.push(N)},oe=N=>{a.tags.splice(N,1)},xe=async()=>{if(!(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)&&!await v("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
|
||
|
||
是否继续?`,"继续保存","返回修改","warning"))){z.value=!0;try{const N={};if(C.value)for(const[ie,ae]of Object.entries(a.serviceRates))ae!=null&&ae!==""&&(N[ie]=ae);const i={name:a.name,serviceRates:N,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:")?(i.claudeConsoleAccountId=a.claudeAccountId.substring(8),i.claudeAccountId=null):(a.claudeAccountId.startsWith("group:"),i.claudeAccountId=a.claudeAccountId,i.claudeConsoleAccountId=null):(i.claudeAccountId=null,i.claudeConsoleAccountId=null),a.geminiAccountId?i.geminiAccountId=a.geminiAccountId:i.geminiAccountId=null,a.openaiAccountId?i.openaiAccountId=a.openaiAccountId:i.openaiAccountId=null,a.bedrockAccountId?i.bedrockAccountId=a.bedrockAccountId:i.bedrockAccountId=null,a.droidAccountId?i.droidAccountId=a.droidAccountId:i.droidAccountId=null,i.enableModelRestriction=a.enableModelRestriction,i.restrictedModels=a.restrictedModels,i.enableClientRestriction=a.enableClientRestriction,i.allowedClients=a.allowedClients,i.isActive=a.isActive,a.ownerId!==void 0&&(i.ownerId=a.ownerId);const k=await Vt(c.apiKey.id,i);k.success?(P("success"),P("close")):R(k.message||"更新失败","error")}catch{R("更新失败","error")}finally{z.value=!1}}},Te=async()=>{var N,i;S.value=!0;try{const[k,ie,ae,E,l,y,de,Ue,Se]=await Promise.all([Pt(),Et(),Ot(),jt(),Gt(),zt(),qt(),Ft(),Bt()]),Be=[];k.success&&((N=k.data)==null||N.forEach(ce=>{Be.push({...ce,platform:"claude-oauth",isDedicated:ce.accountType==="dedicated"})})),ie.success&&((i=ie.data)==null||i.forEach(ce=>{Be.push({...ce,platform:"claude-console",isDedicated:ce.accountType==="dedicated"})})),M.value.claude=Be;const ye=[];ae.success&&(ae.data||[]).forEach(ce=>{ye.push({...ce,platform:"gemini",isDedicated:ce.accountType==="dedicated"})}),E.success&&(E.data||[]).forEach(ce=>{ye.push({...ce,platform:"gemini-api",isDedicated:ce.accountType==="dedicated"})}),M.value.gemini=ye;const Qe=[];if(l.success&&(l.data||[]).forEach(ce=>{Qe.push({...ce,platform:"openai",isDedicated:ce.accountType==="dedicated"})}),y.success&&(y.data||[]).forEach(ce=>{Qe.push({...ce,platform:"openai-responses",isDedicated:ce.accountType==="dedicated"})}),M.value.openai=Qe,de.success&&(M.value.bedrock=(de.data||[]).map(ce=>({...ce,isDedicated:ce.accountType==="dedicated"}))),Ue.success&&(M.value.droid=(Ue.data||[]).map(ce=>({...ce,platform:"droid",isDedicated:ce.accountType==="dedicated"}))),Se.success){const ce=Se.data||[];M.value.claudeGroups=ce.filter(Ve=>Ve.platform==="claude"),M.value.geminiGroups=ce.filter(Ve=>Ve.platform==="gemini"),M.value.openaiGroups=ce.filter(Ve=>Ve.platform==="openai"),M.value.droidGroups=ce.filter(Ve=>Ve.platform==="droid")}R("账号列表已刷新","success")}catch{R("刷新账号列表失败","error")}finally{S.value=!1}},Ce=async()=>{try{const N=await Ga();N.success&&(G.value=N.data||[])}catch{G.value=[{id:"admin",username:"admin",displayName:"Admin",email:"",role:"admin"}]}};return wt(async()=>{try{const[k,ie]=await Promise.all([Y.loadSupportedClients(),I.fetchTags(),Ce()]);se.value=k||[],te.value=ie||[]}catch{se.value=[],te.value=[]}if(c.accounts){const k=(c.accounts.gemini||[]).map(ae=>({...ae,platform:ae.platform||"gemini"})),ie=[];c.accounts.openai&&c.accounts.openai.forEach(ae=>{ie.push({...ae,platform:ae.platform||"openai"})}),c.accounts.openaiResponses&&c.accounts.openaiResponses.forEach(ae=>{ie.push({...ae,platform:ae.platform||"openai-responses"})}),M.value={claude:c.accounts.claude||[],gemini:k,openai:ie,bedrock:c.accounts.bedrock||[],droid:(c.accounts.droid||[]).map(ae=>({...ae,platform:ae.platform||"droid"})),claudeGroups:c.accounts.claudeGroups||[],geminiGroups:c.accounts.geminiGroups||[],openaiGroups:c.accounts.openaiGroups||[],droidGroups:c.accounts.droidGroups||[]}}a.name=c.apiKey.name,a.serviceRates=c.apiKey.serviceRates||{},C.value=Object.keys(a.serviceRates).length>0,a.tokenLimit=c.apiKey.tokenLimit||"",a.rateLimitCost=c.apiKey.rateLimitCost||"",c.apiKey.tokenLimit>0&&c.apiKey.rateLimitCost,a.rateLimitWindow=c.apiKey.rateLimitWindow||"",a.rateLimitRequests=c.apiKey.rateLimitRequests||"",a.concurrencyLimit=c.apiKey.concurrencyLimit||"",a.dailyCostLimit=c.apiKey.dailyCostLimit||"",a.totalCostLimit=c.apiKey.totalCostLimit||"",a.weeklyOpusCostLimit=c.apiKey.weeklyOpusCostLimit||"";const N=["claude","gemini","openai","droid"];let i=c.apiKey.permissions;if(typeof i=="string")if(i==="all"||i==="")i=[];else if(i.startsWith("["))try{i=JSON.parse(i)}catch{i=N.includes(i)?[i]:[]}else i.includes(",")?i=i.split(",").map(k=>k.trim()).filter(k=>N.includes(k)):N.includes(i)?i=[i]:i=[];Array.isArray(i)?a.permissions=i.filter(k=>N.includes(k)):a.permissions=[],c.apiKey.claudeConsoleAccountId?a.claudeAccountId=`console:${c.apiKey.claudeConsoleAccountId}`:a.claudeAccountId=c.apiKey.claudeAccountId||"",a.geminiAccountId=c.apiKey.geminiAccountId||"",a.openaiAccountId=c.apiKey.openaiAccountId||"",a.bedrockAccountId=c.apiKey.bedrockAccountId||"",a.droidAccountId=c.apiKey.droidAccountId||"",a.restrictedModels=c.apiKey.restrictedModels||[],a.allowedClients=c.apiKey.allowedClients||[],a.tags=c.apiKey.tags||[],a.enableModelRestriction=c.apiKey.enableModelRestriction===!0||c.apiKey.enableModelRestriction==="true",a.enableClientRestriction=c.apiKey.enableClientRestriction===!0||c.apiKey.enableClientRestriction==="true",a.isActive=c.apiKey.isActive===void 0||c.apiKey.isActive===!0||c.apiKey.isActive==="true",a.ownerId=c.apiKey.userId||"admin"}),(N,i)=>(o(),he(Oe,{to:"body"},[e("div",Al,[e("div",Cl,[e("div",$l,[i[40]||(i[40]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 编辑 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:i[0]||(i[0]=k=>N.$emit("close"))},i[39]||(i[39]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:$e(xe,["prevent"])},[e("div",null,[i[41]||(i[41]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"名称",-1)),e("div",null,[_(e("input",{"onUpdate:modelValue":i[1]||(i[1]=k=>a.name=k),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),[[le,a.name]])]),i[42]||(i[42]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 用于识别此 API Key 的用途 ",-1))]),e("div",Il,[e("div",Kl,[e("div",Ll,[_(e("input",{id:"editEnableServiceRates","onUpdate:modelValue":i[2]||(i[2]=k=>C.value=k),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-purple-600 focus:ring-purple-500",type:"checkbox"},null,512),[[Ie,C.value]]),i[43]||(i[43]=e("label",{class:"cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableServiceRates"}," 自定义服务倍率 ",-1))]),i[44]||(i[44]=e("span",{class:"text-xs text-gray-500 dark:text-gray-400"}," 与全局倍率相乘,用于 VIP 折扣等(如全局1.5 × Key倍率0.8 = 1.2) ",-1))]),C.value?(o(),n("div",Dl,[(o(),n(re,null,ge(T,k=>e("div",{key:k.key,class:"flex items-center gap-2"},[e("span",Tl,u(k.label),1),_(e("input",{"onUpdate:modelValue":ie=>a.serviceRates[k.key]=ie,class:"form-input w-24 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"1.0",step:"0.1",type:"number"},null,8,_l),[[le,a.serviceRates[k.key],void 0,{number:!0}]]),i[45]||(i[45]=e("span",{class:"text-xs text-gray-400"},"默认 1.0",-1))])),64))])):$("",!0)]),e("div",null,[i[46]||(i[46]=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("select",{"onUpdate:modelValue":i[3]||(i[3]=k=>a.ownerId=k),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},[(o(!0),n(re,null,ge(G.value,k=>(o(),n("option",{key:k.id,value:k.id},[K(u(k.displayName)+" ("+u(k.username)+") ",1),k.role==="admin"?(o(),n("span",Ml,"- 管理员")):$("",!0)],8,Sl))),128))],512),[[kt,a.ownerId]]),i[47]||(i[47]=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,[i[55]||(i[55]=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",Ul,[a.tags.length>0?(o(),n("div",Rl,[i[49]||(i[49]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",Vl,[(o(!0),n(re,null,ge(a.tags,(k,ie)=>(o(),n("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"},[K(u(k)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:ae=>oe(ie)},i[48]||(i[48]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Pl)]))),128))])])):$("",!0),H.value.length>0?(o(),n("div",El,[i[51]||(i[51]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Ol,[(o(!0),n(re,null,ge(H.value,k=>(o(),n("button",{key:"available-"+k,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=>b(k)},[i[50]||(i[50]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),K(" "+u(k),1)],8,jl))),128))])])):$("",!0),e("div",null,[i[53]||(i[53]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",Gl,[_(e("input",{"onUpdate:modelValue":i[4]||(i[4]=k=>ee.value=k),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:tt($e(p,["prevent"]),["enter"])},null,40,zl),[[le,ee.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:p},i[52]||(i[52]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[54]||(i[54]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",ql,[i[63]||(i[63]=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",Fl,[e("div",Bl,[e("div",null,[i[56]||(i[56]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),_(e("input",{"onUpdate:modelValue":i[5]||(i[5]=k=>a.rateLimitWindow=k),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),[[le,a.rateLimitWindow]]),i[57]||(i[57]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[i[58]||(i[58]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),_(e("input",{"onUpdate:modelValue":i[6]||(i[6]=k=>a.rateLimitRequests=k),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),[[le,a.rateLimitRequests]]),i[59]||(i[59]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[i[60]||(i[60]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),_(e("input",{"onUpdate:modelValue":i[7]||(i[7]=k=>a.rateLimitCost=k),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),[[le,a.rateLimitCost]]),i[61]||(i[61]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),i[62]||(i[62]=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:"),K(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),K(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),K(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[i[65]||(i[65]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Wl,[e("div",Nl,[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:i[8]||(i[8]=k=>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:i[9]||(i[9]=k=>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:i[10]||(i[10]=k=>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:i[11]||(i[11]=k=>a.dailyCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":i[12]||(i[12]=k=>a.dailyCostLimit=k),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),[[le,a.dailyCostLimit]]),i[64]||(i[64]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[67]||(i[67]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",Hl,[e("div",Yl,[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:i[13]||(i[13]=k=>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:i[14]||(i[14]=k=>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:i[15]||(i[15]=k=>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:i[16]||(i[16]=k=>a.totalCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":i[17]||(i[17]=k=>a.totalCostLimit=k),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),[[le,a.totalCostLimit]]),i[66]||(i[66]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[69]||(i[69]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Claude 模型周费用限制 (美元)",-1)),e("div",Ql,[e("div",Jl,[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:i[18]||(i[18]=k=>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:i[19]||(i[19]=k=>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:i[20]||(i[20]=k=>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:i[21]||(i[21]=k=>a.weeklyOpusCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":i[22]||(i[22]=k=>a.weeklyOpusCostLimit=k),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),[[le,a.weeklyOpusCostLimit]]),i[68]||(i[68]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效,0 或留空表示无限制 ",-1))])]),e("div",null,[i[70]||(i[70]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),_(e("input",{"onUpdate:modelValue":i[23]||(i[23]=k=>a.concurrencyLimit=k),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),[[le,a.concurrencyLimit]]),i[71]||(i[71]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数 ",-1))]),e("div",null,[e("div",Xl,[_(e("input",{id:"editIsActive","onUpdate:modelValue":i[24]||(i[24]=k=>a.isActive=k),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),[[Ie,a.isActive]]),i[72]||(i[72]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editIsActive"}," 激活账号 ",-1))]),i[73]||(i[73]=e("p",{class:"mb-4 text-xs text-gray-500 dark:text-gray-400"}," 取消勾选将禁用此 API Key,暂停所有请求,客户端返回 401 错误 ",-1))]),e("div",null,[i[78]||(i[78]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Zl,[e("label",en,[_(e("input",{"onUpdate:modelValue":i[25]||(i[25]=k=>a.permissions=k),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude",onChange:Z},null,544),[[Ie,a.permissions]]),i[74]||(i[74]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",tn,[_(e("input",{"onUpdate:modelValue":i[26]||(i[26]=k=>a.permissions=k),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini",onChange:Z},null,544),[[Ie,a.permissions]]),i[75]||(i[75]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",sn,[_(e("input",{"onUpdate:modelValue":i[27]||(i[27]=k=>a.permissions=k),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai",onChange:Z},null,544),[[Ie,a.permissions]]),i[76]||(i[76]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",an,[_(e("input",{"onUpdate:modelValue":i[28]||(i[28]=k=>a.permissions=k),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid",onChange:Z},null,544),[[Ie,a.permissions]]),i[77]||(i[77]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),i[79]||(i[79]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",rn,[i[80]||(i[80]=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:S.value,title:"刷新账号列表",type:"button",onClick:Te},[e("i",{class:F(["fas",S.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,u(S.value?"刷新中...":"刷新账号"),1)],8,on)]),e("div",ln,[e("div",null,[i[81]||(i[81]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ne(_e,{modelValue:a.claudeAccountId,"onUpdate:modelValue":i[29]||(i[29]=k=>a.claudeAccountId=k),accounts:M.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:M.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[82]||(i[82]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ne(_e,{modelValue:a.geminiAccountId,"onUpdate:modelValue":i[30]||(i[30]=k=>a.geminiAccountId=k),accounts:M.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:M.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[83]||(i[83]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ne(_e,{modelValue:a.openaiAccountId,"onUpdate:modelValue":i[31]||(i[31]=k=>a.openaiAccountId=k),accounts:M.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:M.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[84]||(i[84]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ne(_e,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":i[32]||(i[32]=k=>a.bedrockAccountId=k),accounts:M.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[85]||(i[85]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ne(_e,{modelValue:a.droidAccountId,"onUpdate:modelValue":i[33]||(i[33]=k=>a.droidAccountId=k),accounts:M.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:M.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),i[86]||(i[86]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 修改绑定账号将影响此API Key的请求路由 ",-1))]),e("div",null,[e("div",nn,[_(e("input",{id:"editEnableModelRestriction","onUpdate:modelValue":i[34]||(i[34]=k=>a.enableModelRestriction=k),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),[[Ie,a.enableModelRestriction]]),i[87]||(i[87]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(o(),n("div",dn,[e("div",null,[i[90]||(i[90]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"限制的模型列表",-1)),e("div",un,[(o(!0),n(re,null,ge(a.restrictedModels,(k,ie)=>(o(),n("span",{key:ie,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"},[K(u(k)+" ",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:ae=>D(ie)},i[88]||(i[88]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,cn)]))),128)),a.restrictedModels.length===0?(o(),n("span",gn," 暂无限制的模型 ")):$("",!0)]),e("div",pn,[e("div",mn,[(o(!0),n(re,null,ge(x.value,k=>(o(),n("button",{key:k,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:ie=>d(k)},u(k),9,xn))),128)),x.value.length===0?(o(),n("span",yn," 所有常用模型已在限制列表中 ")):$("",!0)]),e("div",fn,[_(e("input",{"onUpdate:modelValue":i[35]||(i[35]=k=>a.modelInput=k),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:tt($e(V,["prevent"]),["enter"])},null,40,bn),[[le,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:V},i[89]||(i[89]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[91]||(i[91]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):$("",!0)]),e("div",null,[e("div",vn,[_(e("input",{id:"editEnableClientRestriction","onUpdate:modelValue":i[36]||(i[36]=k=>a.enableClientRestriction=k),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),[[Ie,a.enableClientRestriction]]),i[92]||(i[92]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(o(),n("div",kn,[e("div",null,[i[93]||(i[93]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"允许的客户端",-1)),i[94]||(i[94]=e("p",{class:"mb-3 text-xs text-gray-500 dark:text-gray-400"}," 勾选允许使用此API Key的客户端 ",-1)),e("div",wn,[(o(!0),n(re,null,ge(se.value,k=>(o(),n("div",{key:k.id,class:"flex items-start"},[_(e("input",{id:`edit_client_${k.id}`,"onUpdate:modelValue":i[37]||(i[37]=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:k.id},null,8,hn),[[Ie,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`edit_client_${k.id}`},[e("span",Cn,u(k.name),1),e("span",$n,u(k.description),1)],8,An)]))),128))])])])):$("",!0)]),e("div",In,[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:i[38]||(i[38]=k=>N.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:z.value,type:"submit"},[z.value?(o(),n("div",Ln)):(o(),n("i",Dn)),K(" "+u(z.value?"保存中...":"保存修改"),1)],8,Kn)])],32)])]),ne(at,{"cancel-text":X.value.cancelText,"confirm-text":X.value.confirmText,message:X.value.message,show:W.value,title:X.value.title,type:X.value.type,onCancel:f,onConfirm:L},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},_n={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Sn={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-8"},Mn={class:"mb-6 flex items-center justify-between"},Un={class:"modal-scroll-content custom-scrollbar flex-1 space-y-6"},Rn={class:"rounded-lg border border-blue-200 bg-blue-50 p-4"},Vn={class:"flex items-start gap-3"},Pn={class:"text-sm text-gray-700"},En={class:"mt-1 text-xs text-gray-600"},On={key:0,class:"mt-3"},jn=["min"],Gn={key:1,class:"mt-2 text-xs text-gray-500"},zn={class:"flex gap-3 pt-4"},qn=["disabled"],Fn={key:0,class:"loading-spinner mr-2"},Bn={key:1,class:"fas fa-clock mr-2"},Wn={__name:"RenewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close","success"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=ut({renewDuration:"30d",customExpireDate:"",newExpiresAt:null}),z=j(()=>{const v=new Date;return c.apiKey.expiresAt&&new Date(c.apiKey.expiresAt)>v?new Date(c.apiKey.expiresAt).toISOString().slice(0,16):(v.setMinutes(v.getMinutes()+1),v.toISOString().slice(0,16))}),S=v=>new Date(v).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),W=()=>{if(!I.renewDuration){I.newExpiresAt=null;return}if(I.renewDuration==="permanent"){I.newExpiresAt=null;return}if(I.renewDuration==="custom")return;const v=c.apiKey.expiresAt&&new Date(c.apiKey.expiresAt)>new Date?new Date(c.apiKey.expiresAt):new Date,f=I.renewDuration.match(/(\d+)([dhmy])/);if(f){const[,M,se]=f,G=parseInt(M);switch(se){case"d":v.setDate(v.getDate()+G);break;case"h":v.setHours(v.getHours()+G);break;case"m":v.setMonth(v.getMonth()+G);break;case"y":v.setFullYear(v.getFullYear()+G);break}I.newExpiresAt=v.toISOString()}},X=()=>{I.customExpireDate&&(I.newExpiresAt=new Date(I.customExpireDate).toISOString())},Q=async()=>{Y.value=!0;try{const v={expiresAt:I.renewDuration==="permanent"?null:I.newExpiresAt},L=await Vt(c.apiKey.id,v);L.success?(R("API Key 续期成功","success"),P("success"),P("close")):R(L.message||"续期失败","error")}catch{R("续期失败","error")}finally{Y.value=!1}};return W(),(v,L)=>(o(),he(Oe,{to:"body"},[e("div",_n,[e("div",Sn,[e("div",Mn,[L[5]||(L[5]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-clock text-white"})]),e("h3",{class:"text-xl font-bold text-gray-900"},"续期 API Key")],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:L[0]||(L[0]=f=>v.$emit("close"))},L[4]||(L[4]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Un,[e("div",Rn,[e("div",Vn,[L[7]||(L[7]=e("div",{class:"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[L[6]||(L[6]=e("h4",{class:"mb-1 font-semibold text-gray-800"},"API Key 信息",-1)),e("p",Pn,u(h.apiKey.name),1),e("p",En," 当前过期时间:"+u(h.apiKey.expiresAt?S(h.apiKey.expiresAt):"永不过期"),1)])])]),e("div",null,[L[9]||(L[9]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"续期时长",-1)),_(e("select",{"onUpdate:modelValue":L[1]||(L[1]=f=>I.renewDuration=f),class:"form-input w-full",onChange:W},L[8]||(L[8]=[e("option",{value:"7d"},"延长 7 天",-1),e("option",{value:"30d"},"延长 30 天",-1),e("option",{value:"90d"},"延长 90 天",-1),e("option",{value:"180d"},"延长 180 天",-1),e("option",{value:"365d"},"延长 365 天",-1),e("option",{value:"custom"},"自定义日期",-1),e("option",{value:"permanent"},"设为永不过期",-1)]),544),[[kt,I.renewDuration]]),I.renewDuration==="custom"?(o(),n("div",On,[_(e("input",{"onUpdate:modelValue":L[2]||(L[2]=f=>I.customExpireDate=f),class:"form-input w-full",min:z.value,type:"datetime-local",onChange:X},null,40,jn),[[le,I.customExpireDate]])])):$("",!0),I.newExpiresAt?(o(),n("p",Gn," 新的过期时间:"+u(S(I.newExpiresAt)),1)):$("",!0)])]),e("div",zn,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200",type:"button",onClick:L[3]||(L[3]=f=>v.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:Y.value||!I.renewDuration,type:"button",onClick:Q},[Y.value?(o(),n("div",Fn)):(o(),n("i",Bn)),K(" "+u(Y.value?"续期中...":"确认续期"),1)],8,qn)])])])]))}},Nn={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Hn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-lg overflow-y-auto p-8"},Yn={class:"mb-6 space-y-4"},Qn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},Jn={class:"font-medium text-gray-900 dark:text-gray-100"},Xn={key:0},Zn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},ei={class:"text-gray-700 dark:text-gray-300"},ti={class:"relative"},si={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"},ai={class:"absolute right-3 top-3"},ri=["title"],oi={__name:"NewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=A(!1),z=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),S=A(null),W=(C,T,a="确认",Z="取消",V="primary")=>new Promise(D=>{z.value={title:C,message:T,confirmText:a,cancelText:Z,type:V},S.value=D,I.value=!0}),X=()=>{var C;I.value=!1,(C=S.value)==null||C.call(S,!0)},Q=()=>{var C;I.value=!1,(C=S.value)==null||C.call(S,!1)},v=()=>{if(typeof window<"u"){const C=window.location.protocol,T=window.location.host;let a=C+"//"+T;const Z=window.location.href,V=Z.indexOf("/",8);return V!==-1&&(a=Z.substring(0,V)),a}return""},L=j(()=>v()+"/api"),f=()=>{Y.value=!Y.value},M=()=>{const C=c.apiKey.apiKey||c.apiKey.key||"";return C?Y.value||C.length<=12?C:C.substring(0,8)+"●".repeat(Math.max(0,C.length-12))+C.substring(C.length-4):""},se=async(C,T)=>{try{await navigator.clipboard.writeText(C),R(T,"success")}catch{const Z=document.createElement("textarea");Z.value=C,document.body.appendChild(Z),Z.select();try{document.execCommand("copy"),R(T,"success")}catch{R("复制失败,请手动复制","error")}finally{document.body.removeChild(Z)}}},G=async()=>{const C=c.apiKey.apiKey||c.apiKey.key||"";if(!C){R("API Key 不存在","error");return}const T=`export ANTHROPIC_BASE_URL="${L.value}"
|
||
export ANTHROPIC_AUTH_TOKEN="${C}"`;await se(T,"配置信息已复制到剪贴板")},ee=async()=>{const C=c.apiKey.apiKey||c.apiKey.key||"";if(!C){R("API Key 不存在","error");return}await se(C,"API Key 已复制")},te=async()=>{await W("关闭提醒",`关闭后将无法再次查看完整的API Key,请确保已经妥善保存。
|
||
|
||
确定要关闭吗?`,"确定关闭","取消","warning")&&P("close")},H=async()=>{await W("确定要关闭吗?",`您还没有保存API Key,关闭后将无法再次查看。
|
||
|
||
建议您先复制API Key再关闭。`,"仍然关闭","返回复制","warning")&&P("close")};return(C,T)=>(o(),he(Oe,{to:"body"},[e("div",Nn,[e("div",Hn,[e("div",{class:"mb-6 flex items-center justify-between"},[T[1]||(T[1]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-check text-lg text-white"})]),e("div",null,[e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"API Key 创建成功"),e("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"请妥善保存您的 API Key")])],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"直接关闭(不推荐)",onClick:H},T[0]||(T[0]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),T[9]||(T[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",Yn,[e("div",null,[T[2]||(T[2]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 名称",-1)),e("div",Qn,[e("span",Jn,u(h.apiKey.name),1)])]),h.apiKey.description?(o(),n("div",Xn,[T[3]||(T[3]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注",-1)),e("div",Zn,[e("span",ei,u(h.apiKey.description||"无描述"),1)])])):$("",!0),e("div",null,[T[4]||(T[4]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),e("div",ti,[e("div",si,u(M()),1),e("div",ai,[e("button",{class:"btn-icon-sm bg-gray-700 hover:bg-gray-800 dark:bg-gray-700 dark:hover:bg-gray-600",title:Y.value?"隐藏API Key":"显示完整API Key",type:"button",onClick:f},[e("i",{class:F(["fas",Y.value?"fa-eye-slash":"fa-eye","text-gray-300"])},null,2)],8,ri)])]),T[5]||(T[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:ee},T[6]||(T[6]=[e("i",{class:"fas fa-key"},null,-1),K(" 仅复制密钥 ",-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:G},T[7]||(T[7]=[e("i",{class:"fas fa-copy"},null,-1),K(" 复制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:te},T[8]||(T[8]=[e("i",{class:"fas fa-check-circle"},null,-1),K(" 我已保存 ",-1)]))])])]),ne(at,{"cancel-text":z.value.cancelText,"confirm-text":z.value.confirmText,message:z.value.message,show:I.value,title:z.value.title,type:z.value.type,onCancel:Q,onConfirm:X},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},li=st(oi,[["__scopeId","data-v-42e73733"]]),ni={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},ii={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-8"},di={class:"mb-6 flex items-center justify-between"},ui={class:"flex items-center gap-3"},ci={class:"text-sm text-gray-600"},gi={class:"mb-6 grid grid-cols-2 gap-4 md:grid-cols-4"},pi={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4"},mi={class:"flex items-center justify-between"},xi={class:"mt-1 text-2xl font-bold text-blue-900"},yi={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4"},fi={class:"flex items-center justify-between"},bi={class:"mt-1 truncate text-lg font-bold text-green-900"},vi={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4"},ki={class:"flex items-center justify-between"},wi={class:"mt-1 text-lg font-bold text-purple-900"},hi={class:"rounded-lg border border-orange-200 bg-gradient-to-br from-orange-50 to-orange-100 p-4"},Ai={class:"flex items-center justify-between"},Ci={class:"mt-1 text-lg font-bold text-orange-900"},$i={class:"mb-6"},Ii={class:"mb-3 flex items-center justify-between"},Ki={class:"flex items-center gap-2"},Li={key:0,class:"custom-scrollbar max-h-48 overflow-y-auto rounded-lg bg-gray-900 p-4"},Di={class:"font-mono text-xs text-gray-300"},Ti={__name:"BatchApiKeyModal",props:{apiKeys:{type:Array,required:!0}},emits:["close"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=A(!1),z=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),S=A(null),W=(H,C,T="确认",a="取消",Z="primary")=>new Promise(V=>{z.value={title:H,message:C,confirmText:T,cancelText:a,type:Z},S.value=V,I.value=!0}),X=()=>{var H;I.value=!1,(H=S.value)==null||H.call(S,!0)},Q=()=>{var H;I.value=!1,(H=S.value)==null||H.call(S,!1)},v=j(()=>{if(c.apiKeys.length>0){const H=c.apiKeys[0],C=H.name.match(/^(.+)_\d+$/);return C?C[1]:H.name}return""}),L=()=>{if(c.apiKeys.length===0)return"未知";const H=c.apiKeys[0].permissions;return{all:"全部服务",claude:"仅 Claude",gemini:"仅 Gemini"}[H]||H},f=()=>{if(c.apiKeys.length===0)return"未知";const H=c.apiKeys[0].expiresAt;if(!H)return"永不过期";const C=new Date(H),a=Math.ceil((C-new Date)/(1e3*60*60*24));return a<=7?`${a}天`:a<=30?`${Math.ceil(a/7)}周`:a<=365?`${Math.ceil(a/30)}个月`:`${Math.ceil(a/365)}年`},M=()=>{Y.value=!Y.value},se=()=>{const C=c.apiKeys.slice(0,10).map(T=>`${T.name}: ${T.apiKey||T.key||""}`);return c.apiKeys.length>10&&C.push(`... 还有 ${c.apiKeys.length-10} 个 API Key`),C.join(`
|
||
`)},G=()=>{const H=c.apiKeys.map(V=>`${V.name}: ${V.apiKey||V.key||""}`).join(`
|
||
`),C=new Blob([H],{type:"text/plain;charset=utf-8"}),T=URL.createObjectURL(C),a=document.createElement("a");a.href=T;const Z=new Date().toISOString().replace(/[:.]/g,"-").slice(0,-5);a.download=`api-keys-${v.value}-${Z}.txt`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(T),R("API Keys 文件已下载","success")},ee=async()=>{await W("关闭提醒",`关闭后将无法再次查看这些 API Key,请确保已经下载并妥善保存。
|
||
|
||
确定要关闭吗?`,"确定关闭","返回下载","warning")&&P("close")},te=async()=>{await W("确定要关闭吗?",`您还没有下载 API Keys,关闭后将无法再次查看。
|
||
|
||
强烈建议您先下载保存。`,"仍然关闭","返回下载","warning")&&P("close")};return(H,C)=>(o(),he(Oe,{to:"body"},[e("div",ni,[e("div",ii,[e("div",di,[e("div",ui,[C[1]||(C[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,[C[0]||(C[0]=e("h3",{class:"text-xl font-bold text-gray-900"},"批量创建成功",-1)),e("p",ci,"成功创建 "+u(h.apiKeys.length)+" 个 API Key",1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",title:"直接关闭(不推荐)",onClick:te},C[2]||(C[2]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),C[14]||(C[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",gi,[e("div",pi,[e("div",mi,[e("div",null,[C[3]||(C[3]=e("p",{class:"text-xs font-medium text-blue-600"},"创建数量",-1)),e("p",xi,u(h.apiKeys.length),1)]),C[4]||(C[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",yi,[e("div",fi,[e("div",null,[C[5]||(C[5]=e("p",{class:"text-xs font-medium text-green-600"},"基础名称",-1)),e("p",bi,u(v.value),1)]),C[6]||(C[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",vi,[e("div",ki,[e("div",null,[C[7]||(C[7]=e("p",{class:"text-xs font-medium text-purple-600"},"权限范围",-1)),e("p",wi,u(L()),1)]),C[8]||(C[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",hi,[e("div",Ai,[e("div",null,[C[9]||(C[9]=e("p",{class:"text-xs font-medium text-orange-600"},"过期时间",-1)),e("p",Ci,u(f()),1)]),C[10]||(C[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",$i,[e("div",Ii,[C[12]||(C[12]=e("label",{class:"text-sm font-semibold text-gray-700"},"API Keys 预览",-1)),e("div",Ki,[e("button",{class:"flex items-center gap-1 text-xs text-blue-600 hover:text-blue-800",type:"button",onClick:M},[e("i",{class:F(["fas",Y.value?"fa-eye-slash":"fa-eye"])},null,2),K(" "+u(Y.value?"隐藏":"显示")+"预览 ",1)]),C[11]||(C[11]=e("span",{class:"text-xs text-gray-500"},"(最多显示前10个)",-1))])]),Y.value?(o(),n("div",Li,[e("pre",Di,u(se()),1)])):$("",!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:G},C[13]||(C[13]=[e("i",{class:"fas fa-download"},null,-1),K(" 下载所有 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:ee}," 我已保存 ")]),C[15]||(C[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))])]),ne(at,{"cancel-text":z.value.cancelText,"confirm-text":z.value.confirmText,message:z.value.message,show:I.value,title:z.value.title,type:z.value.type,onCancel:Q,onConfirm:X},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},_i=st(Ti,[["__scopeId","data-v-fa69edb5"]]),Si={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Mi={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},Ui={class:"mb-4 flex items-center justify-between sm:mb-6"},Ri={class:"flex items-center gap-2 sm:gap-3"},Vi={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Pi={class:"rounded-lg bg-blue-50 p-4 dark:bg-blue-900/20"},Ei={class:"flex items-start gap-3"},Oi={class:"mt-1 text-sm text-blue-700 dark:text-blue-400"},ji={class:"space-y-4"},Gi={class:"flex flex-wrap gap-4"},zi={class:"flex cursor-pointer items-center"},qi={class:"flex cursor-pointer items-center"},Fi={class:"flex cursor-pointer items-center"},Bi={class:"flex cursor-pointer items-center"},Wi={key:0,class:"space-y-3"},Ni={key:0},Hi={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},Yi={class:"flex flex-wrap gap-2"},Qi=["onClick"],Ji={key:1},Xi={class:"flex flex-wrap gap-2"},Zi=["onClick"],ed={class:"flex gap-2"},td=["onKeypress"],sd={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},ad={class:"space-y-2"},rd={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},od={class:"mb-3 flex items-center gap-4"},ld={class:"flex gap-4"},nd={class:"flex cursor-pointer items-center"},id={class:"flex cursor-pointer items-center"},dd={class:"flex cursor-pointer items-center"},ud={class:"flex flex-wrap gap-4"},cd={class:"flex cursor-pointer items-center"},gd={class:"flex cursor-pointer items-center"},pd={class:"flex cursor-pointer items-center"},md={class:"flex cursor-pointer items-center"},xd={class:"flex cursor-pointer items-center"},yd={class:"flex cursor-pointer items-center"},fd={class:"mb-3 flex items-center justify-between"},bd=["disabled"],vd={class:"grid grid-cols-1 gap-3"},kd={class:"flex gap-3 pt-4"},wd=["disabled"],hd={key:0,class:"loading-spinner mr-2"},Ad={key:1,class:"fas fa-save mr-2"},os="__KEEP_ORIGINAL__",Cd={__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(h,{emit:J}){const c=h,P=J,Y=ls(),I=A(!1),z=A(!1),S=A({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),W=A(""),X=A([]),Q=A("none"),v=j(()=>c.selectedKeys.length),L=j(()=>X.value.filter(x=>!f.tags.includes(x))),f=ut({rateLimitCost:"",rateLimitWindow:"",rateLimitRequests:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:"",claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",tags:[],isActive:null}),M=[{value:os,label:"不修改"},{value:"SHARED_POOL",label:"使用共享账号池"}],se=x=>j({get:()=>f[x]===""?os:f[x],set:d=>{!d||d===os?f[x]="":f[x]=d}}),G=se("claudeAccountId"),ee=se("geminiAccountId"),te=se("openaiAccountId"),H=se("bedrockAccountId"),C=se("droidAccountId"),T=x=>!f.permissions||f.permissions==="all"||Array.isArray(f.permissions)&&f.permissions.length===0?!0:Array.isArray(f.permissions)?f.permissions.includes(x):f.permissions===x,a=()=>{if(W.value&&W.value.trim()){const x=W.value.trim();f.tags.includes(x)||f.tags.push(x),W.value=""}},Z=x=>{f.tags.includes(x)||f.tags.push(x)},V=x=>{f.tags.splice(x,1)},D=async()=>{var x,d;z.value=!0;try{const[p,b,oe,xe,Te,Ce,N,i,k]=await Promise.all([Pt(),Et(),Ot(),jt(),Gt(),zt(),qt(),Ft(),Bt()]),ie=[];p.success&&((x=p.data)==null||x.forEach(l=>{ie.push({...l,platform:"claude-oauth",isDedicated:l.accountType==="dedicated"})})),b.success&&((d=b.data)==null||d.forEach(l=>{ie.push({...l,platform:"claude-console",isDedicated:l.accountType==="dedicated"})})),S.value.claude=ie;const ae=[];oe.success&&(oe.data||[]).forEach(l=>{ae.push({...l,platform:"gemini",isDedicated:l.accountType==="dedicated"})}),xe.success&&(xe.data||[]).forEach(l=>{ae.push({...l,platform:"gemini-api",isDedicated:l.accountType==="dedicated"})}),S.value.gemini=ae;const E=[];if(Te.success&&(Te.data||[]).forEach(l=>{E.push({...l,platform:"openai",isDedicated:l.accountType==="dedicated"})}),Ce.success&&(Ce.data||[]).forEach(l=>{E.push({...l,platform:"openai-responses",isDedicated:l.accountType==="dedicated"})}),S.value.openai=E,N.success&&(S.value.bedrock=(N.data||[]).map(l=>({...l,isDedicated:l.accountType==="dedicated"}))),i.success&&(S.value.droid=(i.data||[]).map(l=>({...l,platform:"droid",isDedicated:l.accountType==="dedicated"}))),k.success){const l=k.data||[];S.value.claudeGroups=l.filter(y=>y.platform==="claude"),S.value.geminiGroups=l.filter(y=>y.platform==="gemini"),S.value.openaiGroups=l.filter(y=>y.platform==="openai"),S.value.droidGroups=l.filter(y=>y.platform==="droid")}R("账号列表已刷新","success")}catch{R("刷新账号列表失败","error")}finally{z.value=!1}},U=async()=>{I.value=!0;try{const x={};f.rateLimitCost!==""&&f.rateLimitCost!==null&&(x.rateLimitCost=parseFloat(f.rateLimitCost)),f.rateLimitWindow!==""&&f.rateLimitWindow!==null&&(x.rateLimitWindow=parseInt(f.rateLimitWindow)),f.rateLimitRequests!==""&&f.rateLimitRequests!==null&&(x.rateLimitRequests=parseInt(f.rateLimitRequests)),f.concurrencyLimit!==""&&f.concurrencyLimit!==null&&(x.concurrencyLimit=parseInt(f.concurrencyLimit)),f.dailyCostLimit!==""&&f.dailyCostLimit!==null&&(x.dailyCostLimit=parseFloat(f.dailyCostLimit)),f.totalCostLimit!==""&&f.totalCostLimit!==null&&(x.totalCostLimit=parseFloat(f.totalCostLimit)),f.weeklyOpusCostLimit!==""&&f.weeklyOpusCostLimit!==null&&(x.weeklyOpusCostLimit=parseFloat(f.weeklyOpusCostLimit)),f.permissions!==""&&(x.permissions=f.permissions),f.claudeAccountId!==""&&(f.claudeAccountId==="SHARED_POOL"?(x.claudeAccountId=null,x.claudeConsoleAccountId=null):f.claudeAccountId.startsWith("console:")?(x.claudeConsoleAccountId=f.claudeAccountId.substring(8),x.claudeAccountId=null):(f.claudeAccountId.startsWith("group:"),x.claudeAccountId=f.claudeAccountId,x.claudeConsoleAccountId=null)),f.geminiAccountId!==""&&(f.geminiAccountId==="SHARED_POOL"?x.geminiAccountId=null:x.geminiAccountId=f.geminiAccountId),f.openaiAccountId!==""&&(f.openaiAccountId==="SHARED_POOL"?x.openaiAccountId=null:x.openaiAccountId=f.openaiAccountId),f.bedrockAccountId!==""&&(f.bedrockAccountId==="SHARED_POOL"?x.bedrockAccountId=null:x.bedrockAccountId=f.bedrockAccountId),f.droidAccountId!==""&&(f.droidAccountId==="SHARED_POOL"?x.droidAccountId=null:x.droidAccountId=f.droidAccountId),f.isActive!==null&&(x.isActive=f.isActive),Q.value!=="none"&&(x.tags=f.tags,x.tagOperation=Q.value);const d=await za({keyIds:c.selectedKeys,updates:x});if(d.success){const{successCount:p,failedCount:b,errors:oe}=d.data;if(p>0){if(R(`成功批量编辑 ${p} 个 API Keys`,"success"),b>0){const xe=oe.map(Te=>`${Te.keyId}: ${Te.error}`).join(`
|
||
`);R(`${b} 个编辑失败:
|
||
${xe}`,"warning")}}else R("所有 API Keys 编辑失败","error");P("success"),P("close")}else R(d.message||"批量编辑失败","error")}catch(x){R("批量编辑失败","error"),console.error("批量编辑 API Keys 失败:",x)}finally{I.value=!1}};return wt(async()=>{if(X.value=await Y.fetchTags(),c.accounts){const x=(c.accounts.gemini||[]).map(p=>({...p,platform:p.platform||"gemini"})),d=[];c.accounts.openai&&c.accounts.openai.forEach(p=>{d.push({...p,platform:p.platform||"openai"})}),c.accounts.openaiResponses&&c.accounts.openaiResponses.forEach(p=>{d.push({...p,platform:p.platform||"openai-responses"})}),S.value={claude:c.accounts.claude||[],gemini:x,openai:d,bedrock:c.accounts.bedrock||[],droid:(c.accounts.droid||[]).map(p=>({...p,platform:p.platform||"droid"})),claudeGroups:c.accounts.claudeGroups||[],geminiGroups:c.accounts.geminiGroups||[],openaiGroups:c.accounts.openaiGroups||[],droidGroups:c.accounts.droidGroups||[]}}}),(x,d)=>(o(),he(Oe,{to:"body"},[e("div",Si,[e("div",Mi,[e("div",Ui,[e("div",Ri,[d[28]||(d[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",Vi," 批量编辑 API Keys ("+u(v.value)+" 个) ",1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:d[0]||(d[0]=p=>x.$emit("close"))},d[29]||(d[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(U,["prevent"])},[e("div",Pi,[e("div",Ei,[d[31]||(d[31]=e("i",{class:"fas fa-info-circle mt-1 text-blue-500"},null,-1)),e("div",null,[d[30]||(d[30]=e("p",{class:"text-sm font-medium text-blue-800 dark:text-blue-300"},"批量编辑说明",-1)),e("p",Oi," 以下设置将应用到所选的 "+u(v.value)+" 个 API Key。只有填写或修改的字段才会被更新,空白字段将保持原值不变。 ",1)])])]),e("div",null,[d[41]||(d[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",ji,[e("div",Gi,[e("label",zi,[_(e("input",{"onUpdate:modelValue":d[1]||(d[1]=p=>Q.value=p),class:"mr-2",type:"radio",value:"replace"},null,512),[[De,Q.value]]),d[32]||(d[32]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"替换标签",-1))]),e("label",qi,[_(e("input",{"onUpdate:modelValue":d[2]||(d[2]=p=>Q.value=p),class:"mr-2",type:"radio",value:"add"},null,512),[[De,Q.value]]),d[33]||(d[33]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"添加标签",-1))]),e("label",Fi,[_(e("input",{"onUpdate:modelValue":d[3]||(d[3]=p=>Q.value=p),class:"mr-2",type:"radio",value:"remove"},null,512),[[De,Q.value]]),d[34]||(d[34]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"移除标签",-1))]),e("label",Bi,[_(e("input",{"onUpdate:modelValue":d[4]||(d[4]=p=>Q.value=p),class:"mr-2",type:"radio",value:"none"},null,512),[[De,Q.value]]),d[35]||(d[35]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改标签",-1))])]),Q.value!=="none"?(o(),n("div",Wi,[f.tags.length>0?(o(),n("div",Ni,[e("div",Hi,u(Q.value==="replace"?"新标签列表:":Q.value==="add"?"要添加的标签:":"要移除的标签:"),1),e("div",Yi,[(o(!0),n(re,null,ge(f.tags,(p,b)=>(o(),n("span",{key:"selected-"+b,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"},[K(u(p)+" ",1),e("button",{class:"ml-1 hover:text-blue-900",type:"button",onClick:oe=>V(b)},d[36]||(d[36]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Qi)]))),128))])])):$("",!0),L.value.length>0?(o(),n("div",Ji,[d[38]||(d[38]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Xi,[(o(!0),n(re,null,ge(L.value,p=>(o(),n("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:b=>Z(p)},[d[37]||(d[37]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),K(" "+u(p),1)],8,Zi))),128))])])):$("",!0),e("div",null,[d[40]||(d[40]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",ed,[_(e("input",{"onUpdate:modelValue":d[5]||(d[5]=p=>W.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:tt($e(a,["prevent"]),["enter"])},null,40,td),[[le,W.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:a},d[39]||(d[39]=[e("i",{class:"fas fa-plus"},null,-1)]))])])])):$("",!0)])]),e("div",sd,[d[45]||(d[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",ad,[e("div",rd,[e("div",null,[d[42]||(d[42]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"}," 时间窗口 (分钟) ",-1)),_(e("input",{"onUpdate:modelValue":d[6]||(d[6]=p=>f.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),[[le,f.rateLimitWindow]])]),e("div",null,[d[43]||(d[43]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),_(e("input",{"onUpdate:modelValue":d[7]||(d[7]=p=>f.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),[[le,f.rateLimitRequests]])]),e("div",null,[d[44]||(d[44]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),_(e("input",{"onUpdate:modelValue":d[8]||(d[8]=p=>f.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),[[le,f.rateLimitCost]])])])])]),e("div",null,[d[46]||(d[46]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日费用限制 (美元) ",-1)),_(e("input",{"onUpdate:modelValue":d[9]||(d[9]=p=>f.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),[[le,f.dailyCostLimit]])]),e("div",null,[d[47]||(d[47]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 总费用限制 (美元) ",-1)),_(e("input",{"onUpdate:modelValue":d[10]||(d[10]=p=>f.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),[[le,f.totalCostLimit]])]),e("div",null,[d[48]||(d[48]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," Claude 模型周费用限制 (美元) ",-1)),_(e("input",{"onUpdate:modelValue":d[11]||(d[11]=p=>f.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),[[le,f.weeklyOpusCostLimit]]),d[49]||(d[49]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效 ",-1))]),e("div",null,[d[50]||(d[50]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),_(e("input",{"onUpdate:modelValue":d[12]||(d[12]=p=>f.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),[[le,f.concurrencyLimit]])]),e("div",null,[e("div",od,[d[54]||(d[54]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"激活状态",-1)),e("div",ld,[e("label",nd,[_(e("input",{"onUpdate:modelValue":d[13]||(d[13]=p=>f.isActive=p),class:"mr-2",type:"radio",value:!0},null,512),[[De,f.isActive]]),d[51]||(d[51]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"激活",-1))]),e("label",id,[_(e("input",{"onUpdate:modelValue":d[14]||(d[14]=p=>f.isActive=p),class:"mr-2",type:"radio",value:!1},null,512),[[De,f.isActive]]),d[52]||(d[52]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"禁用",-1))]),e("label",dd,[_(e("input",{"onUpdate:modelValue":d[15]||(d[15]=p=>f.isActive=p),class:"mr-2",type:"radio",value:null},null,512),[[De,f.isActive]]),d[53]||(d[53]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改",-1))])])])]),e("div",null,[d[61]||(d[61]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",ud,[e("label",cd,[_(e("input",{"onUpdate:modelValue":d[16]||(d[16]=p=>f.permissions=p),class:"mr-2",type:"radio",value:""},null,512),[[De,f.permissions]]),d[55]||(d[55]=e("span",{class:"text-sm text-gray-700"},"不修改",-1))]),e("label",gd,[_(e("input",{"onUpdate:modelValue":d[17]||(d[17]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"all"},null,512),[[De,f.permissions]]),d[56]||(d[56]=e("span",{class:"text-sm text-gray-700"},"全部服务",-1))]),e("label",pd,[_(e("input",{"onUpdate:modelValue":d[18]||(d[18]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"claude"},null,512),[[De,f.permissions]]),d[57]||(d[57]=e("span",{class:"text-sm text-gray-700"},"仅 Claude",-1))]),e("label",md,[_(e("input",{"onUpdate:modelValue":d[19]||(d[19]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"gemini"},null,512),[[De,f.permissions]]),d[58]||(d[58]=e("span",{class:"text-sm text-gray-700"},"仅 Gemini",-1))]),e("label",xd,[_(e("input",{"onUpdate:modelValue":d[20]||(d[20]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"openai"},null,512),[[De,f.permissions]]),d[59]||(d[59]=e("span",{class:"text-sm text-gray-700"},"仅 OpenAI",-1))]),e("label",yd,[_(e("input",{"onUpdate:modelValue":d[21]||(d[21]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"droid"},null,512),[[De,f.permissions]]),d[60]||(d[60]=e("span",{class:"text-sm text-gray-700"},"仅 Droid",-1))])])]),e("div",null,[e("div",fd,[d[62]||(d[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:z.value,title:"刷新账号列表",type:"button",onClick:D},[e("i",{class:F(["fas",z.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,u(z.value?"刷新中...":"刷新账号"),1)],8,bd)]),e("div",vd,[e("div",null,[d[63]||(d[63]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ne(_e,{modelValue:Ae(G),"onUpdate:modelValue":d[22]||(d[22]=p=>bt(G)?G.value=p:null),accounts:S.value.claude,"default-option-text":"请选择Claude账号",disabled:!T("claude"),groups:S.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude","special-options":M},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[d[64]||(d[64]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ne(_e,{modelValue:Ae(ee),"onUpdate:modelValue":d[23]||(d[23]=p=>bt(ee)?ee.value=p:null),accounts:S.value.gemini,"default-option-text":"请选择Gemini账号",disabled:!T("gemini"),groups:S.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini","special-options":M},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[d[65]||(d[65]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ne(_e,{modelValue:Ae(te),"onUpdate:modelValue":d[24]||(d[24]=p=>bt(te)?te.value=p:null),accounts:S.value.openai,"default-option-text":"请选择OpenAI账号",disabled:!T("openai"),groups:S.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai","special-options":M},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[d[66]||(d[66]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ne(_e,{modelValue:Ae(H),"onUpdate:modelValue":d[25]||(d[25]=p=>bt(H)?H.value=p:null),accounts:S.value.bedrock,"default-option-text":"请选择Bedrock账号",disabled:!T("openai"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock","special-options":M},null,8,["modelValue","accounts","disabled"])]),e("div",null,[d[67]||(d[67]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ne(_e,{modelValue:Ae(C),"onUpdate:modelValue":d[26]||(d[26]=p=>bt(C)?C.value=p:null),accounts:S.value.droid,"default-option-text":"请选择Droid账号",disabled:!T("droid"),groups:S.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid","special-options":M},null,8,["modelValue","accounts","disabled","groups"])])])]),e("div",kd,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:d[27]||(d[27]=p=>x.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:I.value,type:"submit"},[I.value?(o(),n("div",hd)):(o(),n("i",Ad)),K(" "+u(I.value?"保存中...":"批量保存"),1)],8,wd)])],32)])])]))}},$d={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Id={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Kd={class:"mb-6 flex items-center justify-between"},Ld={class:"flex items-center gap-3"},Dd={class:"text-sm text-gray-600 dark:text-gray-400"},Td={class:"space-y-6"},_d={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"},Sd={class:"flex items-center justify-between"},Md={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Ud={class:"ml-2 text-xs font-normal text-gray-600"},Rd={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Vd={key:0,class:"mb-4"},Pd={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Ed={class:"mb-3 grid grid-cols-3 gap-2"},Od=["onClick"],jd={key:1,class:"animate-fadeIn"},Gd=["min"],zd={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"},qd={class:"flex items-center justify-between"},Fd={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Bd={class:"flex gap-3 pt-2"},Wd=["disabled"],Nd={key:0,class:"loading-spinner mr-2"},Hd={key:1,class:"fas fa-save mr-2"},Yd={__name:"ExpiryEditModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","save"],setup(h,{expose:J,emit:c}){const P=h,Y=c,I=A(!1),z=A(!1),S=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),W=A(null),X=(V,D,U="确认",x="取消",d="primary")=>new Promise(p=>{S.value={title:V,message:D,confirmText:U,cancelText:x,type:d},W.value=p,z.value=!0}),Q=()=>{var V;z.value=!1,(V=W.value)==null||V.call(W,!0)},v=()=>{var V;z.value=!1,(V=W.value)==null||V.call(W,!1)},L=ut({expireDuration:"",customExpireDate:"",expiresAt:null}),f=[{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 年"}],M=j(()=>{const V=new Date;return V.setMinutes(V.getMinutes()+1),V.toISOString().slice(0,16)});Re(()=>P.show,V=>{V&&se()}),Re(()=>{var V;return(V=P.apiKey)==null?void 0:V.id},V=>{V&&P.show&&se()});const se=()=>{I.value=!1,P.apiKey.expiresAt?(L.expireDuration="custom",L.customExpireDate=new Date(P.apiKey.expiresAt).toISOString().slice(0,16),L.expiresAt=P.apiKey.expiresAt):(L.expireDuration="",L.customExpireDate="",L.expiresAt=null)},G=V=>{if(L.expireDuration=V,!V){L.expiresAt=null;return}if(V==="custom")return;const D=new Date,U=V.match(/(\d+)([dhmy])/);if(U){const[,x,d]=U,p=parseInt(x);switch(d){case"d":D.setDate(D.getDate()+p);break;case"h":D.setHours(D.getHours()+p);break;case"m":D.setMonth(D.getMonth()+p);break;case"y":D.setFullYear(D.getFullYear()+p);break}L.expiresAt=D.toISOString()}},ee=()=>{L.customExpireDate&&(L.expiresAt=new Date(L.customExpireDate).toISOString())},te=V=>V?new Date(V).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",H=V=>V?new Date(V)<new Date:!1,C=V=>{if(!V)return null;const D=new Date,x=new Date(V)-D,d=Math.ceil(x/(1e3*60*60*24));return x<0?{text:"已过期",class:"text-red-600"}:d<=7?{text:`${d} 天后过期`,class:"text-orange-600"}:d<=30?{text:`${d} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(d/30)} 个月后过期`,class:"text-green-600"}},T=()=>{I.value=!0,Y("save",{keyId:P.apiKey.id,expiresAt:L.expiresAt})},a=async()=>{await X("激活 API Key",`确定要立即激活此 API Key 吗?激活后将在 ${P.apiKey.activationDays||(P.apiKey.activationUnit==="hours"?24:30)} ${P.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`,"确定激活","取消","warning")&&(I.value=!0,Y("save",{keyId:P.apiKey.id,activateNow:!0}))};return J({resetSaving:()=>{I.value=!1}}),(V,D)=>(o(),he(Oe,{to:"body"},[h.show?(o(),n("div",$d,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:D[0]||(D[0]=U=>V.$emit("close"))}),e("div",Id,[e("div",Kd,[e("div",Ld,[D[6]||(D[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,[D[5]||(D[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改过期时间",-1)),e("p",Dd,' 为 "'+u(h.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:D[1]||(D[1]=U=>V.$emit("close"))},D[7]||(D[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Td,[e("div",_d,[e("div",Sd,[e("div",null,[D[12]||(D[12]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Md,[h.apiKey.expirationMode==="activation"&&!h.apiKey.isActivated?(o(),n(re,{key:0},[D[8]||(D[8]=e("i",{class:"fas fa-pause-circle mr-1 text-blue-500"},null,-1)),D[9]||(D[9]=K(" 未激活 ",-1)),e("span",Ud," (激活后 "+u(h.apiKey.activationDays||(h.apiKey.activationUnit==="hours"?24:30))+" "+u(h.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)],64)):h.apiKey.expiresAt?(o(),n(re,{key:1},[K(u(te(h.apiKey.expiresAt))+" ",1),C(h.apiKey.expiresAt)?(o(),n("span",{key:0,class:F(["ml-2 text-xs font-normal",C(h.apiKey.expiresAt).class])}," ("+u(C(h.apiKey.expiresAt).text)+") ",3)):$("",!0)],64)):(o(),n(re,{key:2},[D[10]||(D[10]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),D[11]||(D[11]=K(" 永不过期 ",-1))],64))])]),e("div",Rd,[e("i",{class:F(["fas fa-hourglass-half text-lg",h.apiKey.expiresAt&&H(h.apiKey.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),h.apiKey.expirationMode==="activation"&&!h.apiKey.isActivated?(o(),n("div",Vd,[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:a},[D[13]||(D[13]=e("i",{class:"fas fa-rocket mr-2"},null,-1)),K(" 立即激活 (激活后 "+u(h.apiKey.activationDays||(h.apiKey.activationUnit==="hours"?24:30))+" "+u(h.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)]),e("p",Pd,[D[14]||(D[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),K(" 点击立即激活此 API Key,激活后将在 "+u(h.apiKey.activationDays||(h.apiKey.activationUnit==="hours"?24:30))+" "+u(h.apiKey.activationUnit==="hours"?"小时":"天")+"后过期 ",1)])])):$("",!0),e("div",null,[D[16]||(D[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",Ed,[(o(),n(re,null,ge(f,U=>e("button",{key:U.value,class:F(["rounded-lg px-3 py-2 text-sm font-medium transition-all",L.expireDuration===U.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:x=>G(U.value)},u(U.label),11,Od)),64)),e("button",{class:F(["rounded-lg px-3 py-2 text-sm font-medium transition-all",L.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:D[2]||(D[2]=U=>G("custom"))},D[15]||(D[15]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),K(" 自定义 ",-1)]),2)])]),L.expireDuration==="custom"?(o(),n("div",jd,[D[17]||(D[17]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),_(e("input",{"onUpdate:modelValue":D[3]||(D[3]=U=>L.customExpireDate=U),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:M.value,type:"datetime-local",onChange:ee},null,40,Gd),[[le,L.customExpireDate]]),D[18]||(D[18]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为过期时间 ",-1))])):$("",!0),L.expiresAt!==h.apiKey.expiresAt?(o(),n("div",zd,[e("div",qd,[e("div",null,[D[21]||(D[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"}),K(" 新的过期时间 ")],-1)),e("p",Fd,[L.expiresAt?(o(),n(re,{key:0},[K(u(te(L.expiresAt))+" ",1),C(L.expiresAt)?(o(),n("span",{key:0,class:F(["ml-2 text-xs font-normal",C(L.expiresAt).class])}," ("+u(C(L.expiresAt).text)+") ",3)):$("",!0)],64)):(o(),n(re,{key:1},[D[19]||(D[19]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),D[20]||(D[20]=K(" 永不过期 ",-1))],64))])]),D[22]||(D[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))])])):$("",!0),e("div",Bd,[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:D[4]||(D[4]=U=>V.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:I.value||L.expiresAt===h.apiKey.expiresAt,onClick:T},[I.value?(o(),n("div",Nd)):(o(),n("i",Hd)),K(" "+u(I.value?"保存中...":"保存更改"),1)],8,Wd)])])])])):$("",!0),ne(at,{"cancel-text":S.value.cancelText,"confirm-text":S.value.confirmText,message:S.value.message,show:z.value,title:S.value.title,type:S.value.type,onCancel:v,onConfirm:Q},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},Qd=st(Yd,[["__scopeId","data-v-20d23095"]]),Jd={class:"w-full"},Xd={key:0,class:"flex items-center justify-center rounded-lg px-3 py-2 text-xs"},Zd={key:1,class:"space-y-1.5"},e0={class:"flex items-center justify-between text-[11px] font-medium"},t0={class:"text-gray-700 dark:text-gray-200"},s0={class:"relative h-1.5 overflow-hidden rounded-full bg-gray-200/85 dark:bg-gray-700/70"},a0={class:"relative z-10 flex h-full items-center justify-between px-3"},r0={class:"flex items-center gap-1.5"},o0={class:"flex items-center gap-1.5"},l0={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"}},n0={__name:"LimitProgressBar",props:{type:{type:String,required:!0,validator:h=>["daily","opus","window","total"].includes(h)},variant:{type:String,default:"full",validator:h=>["full","compact"].includes(h)},label:{type:String,required:!0},current:{type:Number,default:0},limit:{type:Number,required:!0},showShine:{type:Boolean,default:!1}},setup(h){const J=h,c=j(()=>J.variant==="compact"),P=j(()=>{if(!J.limit||J.limit<=0)return 0;const L=J.current/J.limit*100;return Math.min(L,100)}),Y=j(()=>{switch(J.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)]"}}),I=j(()=>{switch(J.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"}}),z=j(()=>{const L=P.value;return J.type==="daily"?L>=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":L>=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":J.type==="opus"?L>=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":L>=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":J.type==="window"?L>=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":L>=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":J.type==="total"?L>=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":L>=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"}),S=j(()=>{const L=P.value;if(L>=95)return"bg-rose-500 dark:bg-rose-400";if(L>=80)return"bg-amber-400 dark:bg-amber-300";switch(J.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-gray-400 dark:bg-gray-500"}}),W=j(()=>{const L=P.value;if(L>=95)return"text-rose-600 dark:text-rose-300";if(L>=80)return"text-amber-600 dark:text-amber-300";switch(J.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"}}),X=j(()=>{const L=P.value;let f="";if(L>=90)f="text-red-700 dark:text-red-400";else if(L>=70)f="text-orange-700 dark:text-orange-400";else switch(J.type){case"daily":f="text-green-700 dark:text-green-400";break;case"opus":f="text-purple-700 dark:text-purple-400";break;case"window":f="text-blue-700 dark:text-blue-400";break;default:f="text-gray-600 dark:text-gray-400"}let M="";switch(J.type){case"daily":M="fas fa-calendar-day";break;case"opus":M="fas fa-gem";break;case"window":M="fas fa-clock";break;case"total":M="fas fa-wallet";break;default:M="fas fa-infinity"}return`${M} ${f}`}),Q=j(()=>{if(P.value>40)return"text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]";switch(J.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"}}),v=j(()=>{const L=P.value;if(L>70)return"text-white drop-shadow-[0_2px_4px_rgba(0,0,0,0.9)]";if(L>=90)return"text-red-700 dark:text-red-300";if(L>=70)return"text-orange-700 dark:text-orange-300";switch(J.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(L,f)=>(o(),n("div",Jd,[!h.limit||h.limit<=0?(o(),n("div",Xd,f[0]||(f[0]=[e("div",{class:"flex items-center gap-1.5 text-gray-600 dark:text-gray-300"},[e("i",{class:"fas fa-infinity text-sm text-gray-500 dark:text-gray-400"}),e("span",{class:"font-medium"},"无限制")],-1)]))):c.value?(o(),n("div",Zd,[e("div",e0,[e("div",{class:F(["flex items-center gap-1.5",W.value])},[e("i",{class:F(["text-[11px]",X.value])},null,2),e("span",null,u(h.label),1)],2),e("span",t0,"$"+u(h.current.toFixed(2))+" / $"+u(h.limit.toFixed(2)),1)]),e("div",s0,[e("div",{class:F(["absolute inset-y-0 rounded-full transition-all duration-500 ease-out",S.value]),style:Rt({width:P.value+"%"})},null,6)])])):(o(),n("div",{key:2,class:F(["group relative h-9 w-full overflow-hidden rounded-xl border transition-all duration-300 ease-out",Y.value])},[e("div",{class:F(["absolute inset-0",I.value])},null,2),e("div",{class:F(["absolute inset-0 h-full transition-all duration-500 ease-out",z.value]),style:Rt({width:P.value+"%"})},null,6),f[1]||(f[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",a0,[e("div",r0,[e("i",{class:F(["text-xs",X.value])},null,2),e("span",{class:F(["text-xs font-semibold",Q.value])},u(h.label),3)]),e("div",o0,[e("span",{class:F(["text-xs font-bold tabular-nums",v.value])}," $"+u(h.current.toFixed(2))+" / $"+u(h.limit.toFixed(2)),3)])]),h.showShine&&P.value>0?(o(),n("div",l0)):$("",!0)],2))]))}},Fe=st(n0,[["__scopeId","data-v-1393272b"]]),i0={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},d0={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"},u0={class:"mb-4 flex items-center justify-between sm:mb-6"},c0={class:"flex items-center gap-2 sm:gap-3"},g0={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},p0={class:"modal-scroll-content custom-scrollbar flex-1 overflow-y-auto"},m0={class:"mb-6 grid grid-cols-1 gap-4 md:grid-cols-2"},x0={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"},y0={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},f0={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},b0={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"},v0={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},k0={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},w0={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"},h0={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},A0={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},C0={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"},$0={class:"space-y-1 text-sm"},I0={class:"flex justify-between"},K0={class:"font-semibold text-gray-900 dark:text-gray-100"},L0={class:"flex justify-between"},D0={class:"font-semibold text-gray-900 dark:text-gray-100"},T0={class:"mb-6"},_0={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},S0={class:"flex items-center justify-between"},M0={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},U0={class:"flex items-center justify-between"},R0={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},V0={key:0,class:"flex items-center justify-between"},P0={class:"text-sm font-semibold text-purple-600"},E0={key:1,class:"flex items-center justify-between"},O0={class:"text-sm font-semibold text-purple-600"},j0={key:0,class:"mb-6"},G0={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},z0={key:0,class:"space-y-1.5"},q0={class:"text-right text-xs text-gray-500 dark:text-gray-400"},F0={key:1,class:"space-y-1.5"},B0={class:"text-right text-xs text-gray-500 dark:text-gray-400"},W0={key:2,class:"space-y-1.5"},N0={class:"text-right text-xs text-gray-500 dark:text-gray-400"},H0={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"},Y0={class:"font-semibold text-purple-600 dark:text-purple-300"},Q0={key:4,class:"space-y-2"},J0={__name:"UsageDetailModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","open-timeline"],setup(h,{emit:J}){const c=h,P=J,Y=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.requests)||0}),I=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.daily)==null?void 0:x.requests)||0}),z=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.tokens)||0}),S=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.daily)==null?void 0:x.tokens)||0}),W=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.cost)||0}),X=j(()=>c.apiKey.dailyCost||0),Q=j(()=>c.apiKey.totalCostLimit||0),v=j(()=>c.apiKey.weeklyOpusCost||0),L=j(()=>c.apiKey.weeklyOpusCostLimit||0),f=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.inputTokens)||0}),M=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.outputTokens)||0}),se=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.cacheCreateTokens)||0}),G=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.cacheReadTokens)||0}),ee=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.averages)==null?void 0:x.rpm)||0}),te=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.averages)==null?void 0:x.tpm)||0}),H=j(()=>c.apiKey.dailyCostLimit>0||c.apiKey.totalCostLimit>0||c.apiKey.concurrencyLimit>0||c.apiKey.weeklyOpusCostLimit>0||c.apiKey.rateLimitWindow>0||c.apiKey.tokenLimit>0),C=j(()=>!c.apiKey.dailyCostLimit||c.apiKey.dailyCostLimit===0?0:X.value/c.apiKey.dailyCostLimit*100),T=j(()=>!Q.value||Q.value===0?0:W.value/Q.value*100),a=j(()=>!L.value||L.value===0?0:v.value/L.value*100),Z=U=>U>=1e6?(U/1e6).toFixed(1)+"M":U>=1e3?(U/1e3).toFixed(1)+"K":U.toString(),V=()=>{P("close")},D=()=>{var U;P("open-timeline",(U=c.apiKey)==null?void 0:U.id)};return(U,x)=>(o(),he(Oe,{to:"body"},[h.show?(o(),n("div",i0,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:V}),e("div",d0,[e("div",u0,[e("div",c0,[x[0]||(x[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",g0," 使用统计详情 - "+u(h.apiKey.name),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:V},x[1]||(x[1]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",p0,[e("div",m0,[e("div",x0,[x[2]||(x[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",y0,u(Ae(vt)(Y.value)),1),e("div",f0," 今日: "+u(Ae(vt)(I.value))+" 次 ",1)]),e("div",b0,[x[3]||(x[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",v0,u(Z(z.value)),1),e("div",k0," 今日: "+u(Z(S.value)),1)]),e("div",w0,[x[4]||(x[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",h0," $"+u(W.value.toFixed(4)),1),e("div",A0," 今日: $"+u(X.value.toFixed(4)),1)]),e("div",C0,[x[7]||(x[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",$0,[e("div",I0,[x[5]||(x[5]=e("span",{class:"text-gray-600 dark:text-gray-400"},"RPM:",-1)),e("span",K0,u(ee.value),1)]),e("div",L0,[x[6]||(x[6]=e("span",{class:"text-gray-600 dark:text-gray-400"},"TPM:",-1)),e("span",D0,u(te.value),1)])])])]),e("div",T0,[x[12]||(x[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"}),K(" Token 使用分布 ")],-1)),e("div",_0,[e("div",S0,[x[8]||(x[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",M0,u(Z(f.value)),1)]),e("div",U0,[x[9]||(x[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",R0,u(Z(M.value)),1)]),se.value>0?(o(),n("div",V0,[x[10]||(x[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",P0,u(Z(se.value)),1)])):$("",!0),G.value>0?(o(),n("div",E0,[x[11]||(x[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",O0,u(Z(G.value)),1)])):$("",!0)])]),H.value?(o(),n("div",j0,[x[15]||(x[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"}),K(" 限制设置 ")],-1)),e("div",G0,[h.apiKey.dailyCostLimit>0?(o(),n("div",z0,[ne(Fe,{current:X.value,label:"每日费用限制",limit:h.apiKey.dailyCostLimit,"show-shine":!0,type:"daily"},null,8,["current","limit"]),e("div",q0," 已使用 "+u(Math.min(C.value,100).toFixed(1))+"% ",1)])):$("",!0),h.apiKey.weeklyOpusCostLimit>0?(o(),n("div",F0,[ne(Fe,{current:v.value,label:"Opus 周费用限制",limit:h.apiKey.weeklyOpusCostLimit,"show-shine":!0,type:"opus"},null,8,["current","limit"]),e("div",B0," 已使用 "+u(Math.min(a.value,100).toFixed(1))+"% ",1)])):$("",!0),h.apiKey.totalCostLimit>0?(o(),n("div",W0,[ne(Fe,{current:W.value,label:"总费用限制",limit:h.apiKey.totalCostLimit,"show-shine":!0,type:"total"},null,8,["current","limit"]),e("div",N0," 已使用 "+u(Math.min(T.value,100).toFixed(1))+"% ",1)])):$("",!0),h.apiKey.concurrencyLimit>0?(o(),n("div",H0,[x[13]||(x[13]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发限制",-1)),e("span",Y0,u(h.apiKey.currentConcurrency||0)+" / "+u(h.apiKey.concurrencyLimit),1)])):$("",!0),h.apiKey.rateLimitWindow>0?(o(),n("div",Q0,[x[14]||(x[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"}),K(" 时间窗口限制 ")],-1)),ne(lr,{"cost-limit":h.apiKey.rateLimitCost,"current-cost":h.apiKey.currentWindowCost,"current-requests":h.apiKey.currentWindowRequests,"current-tokens":h.apiKey.currentWindowTokens,label:"窗口状态","rate-limit-window":h.apiKey.rateLimitWindow,"request-limit":h.apiKey.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":h.apiKey.tokenLimit,"window-end-time":h.apiKey.windowEndTime,"window-remaining-seconds":h.apiKey.windowRemainingSeconds,"window-start-time":h.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"])])):$("",!0)])])):$("",!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:D}," 查看请求时间线 "),e("button",{class:"btn btn-secondary px-4 py-2 text-sm",type:"button",onClick:V}," 关闭 ")])])])):$("",!0)]))}},X0={class:"max-h-[60vh] overflow-y-auto px-6 py-4"},Z0={class:"mb-4 flex gap-2"},eu=["disabled"],tu={key:0,class:"fas fa-spinner fa-spin mr-1"},su={key:1,class:"fas fa-plus mr-1"},au={key:0,class:"py-8 text-center"},ru={key:1,class:"py-8 text-center"},ou={key:2,class:"space-y-2"},lu={class:"flex items-center gap-3"},nu={class:"font-medium text-gray-700 dark:text-gray-200"},iu={class:"rounded-full bg-purple-100 px-2 py-0.5 text-xs text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},du={class:"flex gap-1"},uu=["disabled","onClick"],cu=["disabled","onClick"],gu={class:"w-full max-w-md rounded-2xl bg-white p-6 shadow-2xl dark:bg-gray-800"},pu={class:"mb-4"},mu={class:"flex justify-end gap-3"},xu=["disabled"],yu={key:0,class:"fas fa-spinner fa-spin mr-1"},fu={__name:"TagManagementModal",props:{show:{type:Boolean,default:!1}},emits:["close","updated"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=A(!1),z=A(!1),S=A([]),W=A(""),X=A(!1),Q=A(!1),v=A(null),L=A(null),f=A(""),M=async()=>{Y.value=!0;const T=await Ba();Y.value=!1,T.success&&(S.value=T.data)},se=async()=>{if(!W.value.trim())return;z.value=!0;const T=await qa(W.value.trim());z.value=!1,T.success?(R("标签创建成功","success"),W.value="",M(),P("updated")):R(T.error||"创建失败","error")},G=T=>{v.value=T,X.value=!0},ee=async()=>{if(!v.value)return;X.value=!1,I.value=!0;const T=v.value.name,a=await Wa(T);I.value=!1,a.success?(R(`标签「${T}」已删除`,"success"),S.value=S.value.filter(Z=>Z.name!==T),v.value=null,P("updated")):R(a.error||"删除失败","error")},te=T=>{L.value=T,f.value=T.name,Q.value=!0},H=async()=>{if(!L.value||!f.value.trim())return;I.value=!0;const T=L.value.name,a=await Fa(T,f.value.trim());I.value=!1,a.success?(R("标签已重命名","success"),Q.value=!1,L.value=null,M(),P("updated")):R(a.error||"重命名失败","error")},C=()=>{v.value=null,P("close")};return Re(()=>c.show,T=>{T&&(v.value=null,W.value="",M())}),(T,a)=>{var Z,V;return o(),n(re,null,[(o(),he(Oe,{to:"body"},[ne(Gs,{name:"modal"},{default:js(()=>[h.show?(o(),n("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 backdrop-blur-sm",onClick:$e(C,["self"])},[e("div",{class:"w-full max-w-lg rounded-2xl bg-white shadow-2xl dark:bg-gray-800",onClick:a[1]||(a[1]=$e(()=>{},["stop"]))},[e("div",{class:"flex items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700"},[a[7]||(a[7]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},[e("i",{class:"fas fa-tags mr-2 text-purple-500"}),K(" 标签管理 ")],-1)),e("button",{class:"rounded-lg p-2 text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:C},a[6]||(a[6]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",X0,[e("div",Z0,[_(e("input",{"onUpdate:modelValue":a[0]||(a[0]=D=>W.value=D),class:"flex-1 rounded-lg border border-gray-300 px-3 py-2 text-sm focus:border-purple-500 focus:outline-none focus:ring-1 focus:ring-purple-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",placeholder:"输入新标签名称",type:"text",onKeyup:tt(se,["enter"])},null,544),[[le,W.value]]),e("button",{class:"rounded-lg bg-purple-500 px-4 py-2 text-sm font-medium text-white hover:bg-purple-600 disabled:opacity-50",disabled:!W.value.trim()||z.value||I.value,onClick:se},[z.value?(o(),n("i",tu)):(o(),n("i",su)),a[8]||(a[8]=K(" 新增 ",-1))],8,eu)]),Y.value?(o(),n("div",au,a[9]||(a[9]=[e("i",{class:"fas fa-spinner fa-spin text-2xl text-gray-400"},null,-1),e("p",{class:"mt-2 text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):S.value.length===0?(o(),n("div",ru,a[10]||(a[10]=[e("i",{class:"fas fa-tag text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"mt-2 text-gray-500 dark:text-gray-400"},"暂无标签",-1)]))):(o(),n("div",ou,[(o(!0),n(re,null,ge(S.value,D=>(o(),n("div",{key:D.name,class:"flex items-center justify-between rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-700 dark:bg-gray-700/50"},[e("div",lu,[a[11]||(a[11]=e("i",{class:"fas fa-tag text-purple-500"},null,-1)),e("span",nu,u(D.name),1),e("span",iu,u(D.count)+" 个 Key ",1)]),e("div",du,[e("button",{class:"rounded-lg p-2 text-gray-400 hover:bg-blue-100 hover:text-blue-600 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",disabled:I.value,title:"重命名",onClick:U=>te(D)},a[12]||(a[12]=[e("i",{class:"fas fa-edit"},null,-1)]),8,uu),e("button",{class:"rounded-lg p-2 text-gray-400 hover:bg-red-100 hover:text-red-600 dark:hover:bg-red-900/30 dark:hover:text-red-400",disabled:I.value,title:"删除标签",onClick:U=>G(D)},a[13]||(a[13]=[e("i",{class:"fas fa-trash"},null,-1)]),8,cu)])]))),128))]))]),e("div",{class:"flex justify-end border-t border-gray-200 px-6 py-4 dark:border-gray-700"},[e("button",{class:"rounded-lg bg-gray-100 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:C}," 关闭 ")])])])):$("",!0)]),_:1})])),ne(at,{"cancel-text":"取消","confirm-text":"确定删除",message:`此操作将从 ${((Z=v.value)==null?void 0:Z.count)||0} 个 API Key 中移除该标签,不可恢复。`,show:X.value,title:`删除标签「${((V=v.value)==null?void 0:V.name)||""}」`,type:"danger",onCancel:a[2]||(a[2]=D=>X.value=!1),onConfirm:ee},null,8,["message","show","title"]),(o(),he(Oe,{to:"body"},[Q.value?(o(),n("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 backdrop-blur-sm",onClick:a[5]||(a[5]=$e(D=>Q.value=!1,["self"]))},[e("div",gu,[a[16]||(a[16]=e("h3",{class:"mb-4 text-lg font-semibold text-gray-900 dark:text-white"},"重命名标签",-1)),e("div",pu,[a[14]||(a[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 新名称 ",-1)),_(e("input",{"onUpdate:modelValue":a[3]||(a[3]=D=>f.value=D),class:"w-full rounded-lg border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",placeholder:"请输入新标签名称",type:"text",onKeyup:tt(H,["enter"])},null,544),[[le,f.value]])]),e("div",mu,[e("button",{class:"rounded-lg bg-gray-100 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[4]||(a[4]=D=>Q.value=!1)}," 取消 "),e("button",{class:"rounded-lg bg-blue-500 px-4 py-2 text-sm font-medium text-white hover:bg-blue-600 disabled:opacity-50",disabled:!f.value.trim()||I.value,onClick:H},[I.value?(o(),n("i",yu)):$("",!0),a[15]||(a[15]=K(" 确定 ",-1))],8,xu)])])])):$("",!0)]))],64)}}},bu=st(fu,[["__scopeId","data-v-8e455166"]]),vu={class:"tab-content"},ku={class:"card p-4 sm:p-6"},wu={class:"mb-4 flex flex-col gap-4 sm:mb-6"},hu={class:"border-b border-gray-200 dark:border-gray-700"},Au={"aria-label":"Tabs",class:"-mb-px flex space-x-8"},Cu={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"},$u={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"},Iu={key:0,class:"tab-panel"},Ku={class:"mb-4 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},Lu={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Du={class:"group relative min-w-[140px]"},Tu={key:0,class:"flex items-center"},_u={class:"group relative min-w-[140px]"},Su={class:"relative"},Mu={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"},Uu={class:"group relative min-w-[140px]"},Ru={class:"relative"},Vu={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"},Pu={class:"flex min-w-[240px] flex-col gap-2 sm:flex-row sm:items-center"},Eu={class:"sm:w-44"},Ou={class:"group relative flex-1"},ju={class:"relative flex items-center"},Gu=["placeholder"],zu={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},qu=["disabled"],Fu={class:"relative"},Bu={class:"relative"},Wu={key:0,class:"py-12 text-center"},Nu={key:1,class:"py-12 text-center"},Hu={key:2,class:"table-wrapper hidden md:block"},Yu={class:"table-container"},Qu={class:"w-full"},Ju={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"},Xu={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},Zu={class:"flex items-center"},ec=["indeterminate"],tc={key:1,class:"fas fa-sort ml-1 text-gray-400"},sc={key:1,class:"fas fa-sort ml-1 text-gray-400"},ac=["title"],rc={key:1,class:"fas fa-sort ml-1 text-gray-400"},oc={key:2,class:"fas fa-clock ml-1 text-gray-400",title:"索引更新中"},lc={key:1,class:"fas fa-sort ml-1 text-gray-400"},nc={key:1,class:"fas fa-sort ml-1 text-gray-400"},ic={key:1,class:"fas fa-sort ml-1 text-gray-400"},dc={class:F(["table-row","border-b-2 border-gray-200/80 dark:border-gray-700/50","hover:shadow-sm"])},uc={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},cc={class:"flex items-center"},gc=["value"],pc={class:"min-w-0"},mc=["onClick"],xc={key:0,class:"mt-1 text-xs text-red-600"},yc={class:"px-3 py-3"},fc={class:"space-y-1"},bc={key:0,class:"flex items-center gap-1 text-xs text-gray-400 dark:text-gray-500"},vc={key:0,class:"flex items-center gap-1 text-xs"},kc={class:"truncate text-gray-600 dark:text-gray-400"},wc={key:1,class:"flex items-center gap-1 text-xs"},hc={class:"truncate text-gray-600 dark:text-gray-400"},Ac={key:2,class:"flex items-center gap-1 text-xs"},Cc={class:"truncate text-gray-600 dark:text-gray-400"},$c={key:3,class:"flex items-center gap-1 text-xs"},Ic={class:"truncate text-gray-600 dark:text-gray-400"},Kc={key:4,class:"flex items-center gap-1 text-xs"},Lc={class:"truncate text-gray-600 dark:text-gray-400"},Dc={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},Tc={class:"px-3 py-3"},_c={class:"flex flex-wrap gap-1"},Sc={key:0,class:"text-xs text-gray-400"},Mc={class:"whitespace-nowrap px-3 py-3"},Uc={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Rc={key:0,class:"flex items-center justify-end"},Vc={key:1,class:"font-semibold text-blue-600 dark:text-blue-400",style:{"font-size":"14px"}},Pc={key:2,class:"text-gray-400"},Ec={class:"px-2 py-2",style:{"font-size":"12px"}},Oc={class:"flex flex-col gap-2"},jc={key:0,class:"space-y-2"},Gc={key:2,class:"space-y-1.5"},zc={class:"flex items-center justify-between text-[10px]"},qc={class:"flex items-center gap-1 text-sky-600 dark:text-sky-300"},Fc={class:"font-medium"},Bc={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Wc={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Nc={key:0,class:"flex items-center justify-end"},Hc={key:1,class:"flex items-center justify-end gap-1"},Yc={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Qc={key:2,class:"text-gray-400"},Jc={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Xc={key:0,class:"flex items-center justify-end"},Zc={key:1,class:"flex items-center justify-end gap-1"},eg={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},tg={key:2,class:"text-gray-400"},sg={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},ag={class:"flex flex-col leading-tight"},rg=["title"],og={key:1,class:"text-gray-400",style:{"font-size":"13px"}},lg={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},ng=["title"],ig={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},dg={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},ug={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},cg={class:"whitespace-nowrap px-3 py-3 text-sm text-gray-700 dark:text-gray-300"},gg={class:"inline-flex items-center gap-1.5"},pg={key:0,class:"inline-flex items-center text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},mg={key:1},xg=["onClick"],yg=["onClick"],fg=["onClick"],bg=["onClick"],vg={class:"operations-column operations-cell whitespace-nowrap px-3 py-3",style:{"font-size":"13px"}},kg={class:"hidden gap-1 2xl:flex"},wg=["onClick"],hg=["onClick"],Ag=["onClick"],Cg=["onClick"],$g=["title","onClick"],Ig={class:"ml-1"},Kg=["onClick"],Lg={class:"flex items-center gap-1 2xl:hidden"},Dg=["onClick"],Tg=["onClick"],_g={key:0},Sg={class:"bg-gray-50 px-3 py-3 dark:bg-gray-700",colspan:"13"},Mg={key:0,class:"py-4 text-center"},Ug={class:"space-y-4"},Rg={class:"mb-4 flex items-center justify-between"},Vg={class:"flex items-center gap-2"},Pg={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"},Eg={class:"flex items-center gap-1"},Og={class:"flex gap-1 rounded bg-gray-100 p-1 dark:bg-gray-700"},jg=["onClick"],Gg={key:0,class:"py-8 text-center"},zg={class:"mb-3 flex items-center justify-center gap-2"},qg=["onClick"],Fg={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"},Bg={class:"mb-3 flex items-start justify-between"},Wg={class:"flex-1"},Ng={class:"mb-1 block text-sm font-semibold text-gray-800 dark:text-gray-200"},Hg={class:"rounded-full bg-blue-50 px-2 py-1 text-xs text-gray-500 dark:bg-blue-900/30 dark:text-gray-400"},Yg={class:"mb-3 space-y-2"},Qg={class:"flex items-center justify-between text-sm"},Jg={class:"font-semibold text-gray-900 dark:text-gray-100"},Xg={class:"flex items-center justify-between text-sm"},Zg={class:"font-semibold text-green-600"},ep={class:"mt-2 border-t border-gray-100 pt-2 dark:border-gray-600"},tp={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},sp={class:"font-medium"},ap={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},rp={class:"font-medium"},op={key:0,class:"flex items-center justify-between text-xs text-purple-600"},lp={class:"font-medium"},np={key:1,class:"flex items-center justify-between text-xs text-purple-600"},ip={class:"font-medium"},dp={class:"mt-3 h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},up={class:"mt-1 text-right"},cp={class:"text-xs font-medium text-indigo-600"},gp={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"},pp={class:"flex items-center justify-between text-sm"},mp={class:"flex gap-4 text-xs"},xp={class:"text-gray-600 dark:text-gray-400"},yp={class:"font-semibold text-gray-800 dark:text-gray-200"},fp={class:"text-gray-600 dark:text-gray-400"},bp={class:"font-semibold text-gray-800 dark:text-gray-200"},vp={key:3,class:"space-y-3 md:hidden"},kp={class:"mb-3 flex items-start justify-between"},wp={class:"flex items-center gap-3"},hp=["value"],Ap=["onClick"],Cp={class:"mt-0.5 text-xs text-gray-500 dark:text-gray-400"},$p={class:"mb-3 space-y-1.5"},Ip={key:0,class:"flex flex-wrap items-center gap-1 text-xs"},Kp={class:"text-gray-600 dark:text-gray-400"},Lp={key:1,class:"flex flex-wrap items-center gap-1 text-xs"},Dp={class:"text-gray-600 dark:text-gray-400"},Tp={key:2,class:"flex flex-wrap items-center gap-1 text-xs"},_p={class:"text-gray-600 dark:text-gray-400"},Sp={key:3,class:"flex flex-wrap items-center gap-1 text-xs"},Mp={class:"text-gray-600 dark:text-gray-400"},Up={key:4,class:"flex flex-wrap items-center gap-1 text-xs"},Rp={class:"text-gray-600 dark:text-gray-400"},Vp={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},Pp={key:6,class:"text-xs text-red-600"},Ep={class:"mb-3 space-y-2"},Op={class:"rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},jp={class:"mb-2 flex items-center justify-between"},Gp={class:"text-xs text-gray-600 dark:text-gray-400"},zp=["onClick"],qp={class:"grid grid-cols-2 gap-3"},Fp={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"},Bp={key:1,class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Wp={key:2,class:"text-sm font-semibold text-gray-400"},Np={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"},Hp={key:1,class:"text-sm font-semibold text-green-600"},Yp={key:2,class:"text-sm font-semibold text-gray-400"},Qp={class:"mt-2 text-xs text-gray-600 dark:text-gray-400"},Jp={class:"flex items-center justify-between"},Xp={class:"font-medium text-gray-700 dark:text-gray-300"},Zp={class:"mt-1 flex items-center justify-between"},em={key:0,class:"text-gray-400 dark:text-gray-500"},tm=["title"],sm={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},am={key:2,class:"text-gray-400 dark:text-gray-500"},rm={class:"space-y-2"},om={key:0,class:"space-y-2"},lm={key:2,class:"space-y-2"},nm={class:"flex items-center justify-between text-xs"},im={class:"flex items-center gap-1.5 text-sky-600 dark:text-sky-300"},dm={class:"font-medium"},um={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},cm={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},gm={class:"mb-1 flex justify-between"},pm={class:"flex items-center justify-between"},mm={class:"flex items-center gap-1"},xm=["onClick"],ym={key:0,class:"mb-3 flex flex-wrap gap-1"},fm={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3 dark:border-gray-600"},bm=["onClick"],vm=["onClick"],km=["onClick"],wm=["onClick"],hm=["onClick"],Am={key:4,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},Cm={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},$m={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Im={class:"flex items-center gap-2"},Km=["value"],Lm={class:"flex items-center gap-2"},Dm=["disabled"],Tm={class:"flex items-center gap-1"},_m={key:1,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},Sm=["onClick"],Mm={key:2,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},Um=["disabled"],Rm={key:1,class:"tab-panel"},Vm={key:0,class:"py-12 text-center"},Pm={key:1,class:"py-12 text-center"},Em={key:2},Om={class:"mb-4 flex justify-end"},jm={class:"table-wrapper"},Gm={class:"table-container"},zm={class:"w-full"},qm={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"},Fm={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"},Bm={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Wm={class:"name-column sticky left-0 z-10 px-3 py-3"},Nm={class:"flex items-center"},Hm={class:"min-w-0"},Ym=["onClick"],Qm={class:"px-3 py-3"},Jm={class:"space-y-1"},Xm={key:0,class:"flex items-center gap-1 text-xs"},Zm={key:1,class:"flex items-center gap-1 text-xs"},ex={key:2,class:"flex items-center gap-1 text-xs"},tx={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},sx={key:0,class:"px-3 py-3"},ax={class:"text-xs"},rx={key:0,class:"text-blue-600"},ox={key:1,class:"text-green-600"},lx={key:2,class:"text-gray-500 dark:text-gray-400"},nx={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},ix={class:"px-3 py-3"},dx={class:"text-xs"},ux={key:0,class:"text-blue-600"},cx={key:1,class:"text-green-600"},gx={key:2,class:"text-gray-500 dark:text-gray-400"},px={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},mx={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},xx={class:"font-medium text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},yx={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},fx={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},bx={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},vx={class:"flex items-center justify-end gap-1"},kx={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},wx={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},hx={class:"flex flex-col leading-tight"},Ax=["title"],Cx={key:1,class:"text-gray-400",style:{"font-size":"13px"}},$x={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Ix=["title"],Kx={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Lx={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Dx={class:"operations-column operations-cell px-3 py-3"},Tx={class:"flex items-center gap-2"},_x=["onClick"],Sx=["onClick"],Ps=16,Mx={__name:"ApiKeysView",setup(h){const J=Ua(),c=Na(),P=A([]),Y=j(()=>{var s;return((s=c.oemSettings)==null?void 0:s.ldapEnabled)||!1}),I=A([]),z=A(!1),S=A(!1),W=A(!1),X=A(!1),Q=A("today"),v=ut({type:"preset",preset:"today",customStart:"",customEnd:"",customRange:null}),L=j(()=>W.value),f=()=>{W.value=!W.value,W.value||(I.value=[],z.value=!1,S.value=!1)},M=j(()=>[{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"}]),se=A("active"),G=A([]),ee=A(!1),te=A("createdAt"),H=A("desc"),C=A({}),T=A({}),a=A({page:1,pageSize:20,total:0,totalPages:0}),Z=A(new Map),V=A(new Set),D=A(new Map),U=A(new Set),x=A({}),d=A({}),p=A([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),b=A({claude:[],gemini:[],geminiApi:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),oe=A(!1),xe=A(!1),Te=A(null),Ce=A(null),N=A(!1),i=A(null),k=A(""),ie=A([]),ae=A([]),E=A([]),l=A(""),y=A("apiKey"),de=j(()=>[{value:"apiKey",label:"按Key名称",icon:"fa-key"},{value:"bindingAccount",label:"按所属账号",icon:"fa-id-badge"}]),Ue=j(()=>{const s=[{value:"",label:"所有标签",icon:"fa-asterisk"}];return ie.value.forEach(t=>{s.push({value:t,label:t,icon:"fa-tag"})}),s}),Se=j(()=>E.value.map(s=>({value:s,label:s,icon:"fa-cube"}))),Be=j(()=>k.value?P.value.filter(s=>s.tags&&s.tags.includes(k.value)).length:0),ye=A(1),ce=A((()=>{const s=localStorage.getItem("apiKeysPageSize");if(s){const t=parseInt(s,10);if([10,20,50,100].includes(t))return t}return 10})()),Ve=[10,20,50,100],ze=A(!1),We=A(!1),Ne=A(!1),pe=A(!1),Ee=A(!1),ht=A(!1),Wt=A(!1),ns=A(null),is=A(null),ds=A(null),us=A([]),At=A(!1),rt=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),Je=A(null),ot=(s,t,m="确认",r="取消",w="primary")=>new Promise(q=>{rt.value={title:s,message:t,confirmText:m,cancelText:r,type:w},Je.value=q,At.value=!0}),Bs=()=>{var s;At.value=!1,(s=Je.value)==null||s.call(Je,!0)},Ws=()=>{var s;At.value=!1,(s=Je.value)==null||s.call(Je,!1)},Ct=j(()=>P.value),Xe=j(()=>a.value.totalPages||0),ct=j(()=>{const s=[],t=ye.value,m=Xe.value;if(m<=7)for(let r=1;r<=m;r++)s.push(r);else{let r=Math.max(1,t-2),w=Math.min(m,t+2);t<=3?w=5:t>=m-2&&(r=m-4);for(let q=r;q<=w;q++)s.push(q)}return s}),cs=j(()=>{const s=ct.value;return s.length===0?!1:s[0]>1}),gs=j(()=>{const s=ct.value;return s.length===0?!1:s[s.length-1]<Xe.value}),Ns=j(()=>{const s=ct.value;return s.length===0?!1:cs.value&&s[0]>2}),Hs=j(()=>{const s=ct.value;return s.length===0?!1:gs.value&&s[s.length-1]<Xe.value-1}),lt=j(()=>P.value),$t=async(s=!1)=>{var t,m;if(!(xe.value&&!s)){oe.value=!0;try{const[r,w,q,B,O,me,fe,g,ke]=await Promise.all([Pt(),Et(),Ot(),jt(),Gt(),zt(),qt(),Ft(),Bt()]),we=[];r.success&&((t=r.data)==null||t.forEach(ue=>{we.push({...ue,platform:"claude-oauth",isDedicated:ue.accountType==="dedicated"})})),w.success&&((m=w.data)==null||m.forEach(ue=>{we.push({...ue,platform:"claude-console",isDedicated:ue.accountType==="dedicated"})})),b.value.claude=we;const Le=[];if(q.success&&(q.data||[]).forEach(ue=>{Le.push({...ue,platform:"gemini",isDedicated:ue.accountType==="dedicated"})}),B.success&&(b.value.geminiApi=(B.data||[]).map(ue=>({...ue,platform:"gemini-api",isDedicated:ue.accountType==="dedicated"})),b.value.geminiApi.forEach(ue=>{Le.push(ue)})),b.value.gemini=Le,O.success&&(b.value.openai=(O.data||[]).map(ue=>({...ue,isDedicated:ue.accountType==="dedicated"}))),me.success&&(b.value.openaiResponses=(me.data||[]).map(ue=>({...ue,isDedicated:ue.accountType==="dedicated"}))),fe.success&&(b.value.bedrock=(fe.data||[]).map(ue=>({...ue,isDedicated:ue.accountType==="dedicated"}))),g.success&&(b.value.droid=(g.data||[]).map(ue=>({...ue,platform:"droid",isDedicated:ue.accountType==="dedicated"}))),ke.success){const ue=ke.data||[];b.value.claudeGroups=ue.filter(be=>be.platform==="claude"),b.value.geminiGroups=ue.filter(be=>be.platform==="gemini"),b.value.openaiGroups=ue.filter(be=>be.platform==="openai"),b.value.droidGroups=ue.filter(be=>be.platform==="droid")}xe.value=!0}catch{}finally{oe.value=!1}}},Ys=async()=>{try{const s=await Qa();s.success&&(E.value=s.data||[])}catch(s){console.error("Failed to load used models:",s)}},Ke=async(s=!0)=>{var t,m,r;X.value=!0;try{s&&(Z.value.clear(),D.value.clear());const w=new URLSearchParams;w.set("page",ye.value.toString()),w.set("pageSize",ce.value.toString()),w.set("searchMode",y.value),l.value&&w.set("search",l.value),k.value&&w.set("tag",k.value),ae.value.length>0&&w.set("models",ae.value.join(","));const B=["name","createdAt","expiresAt","lastUsedAt","isActive","status","cost"].includes(te.value)?te.value:"createdAt";w.set("sortBy",B),w.set("sortOrder",H.value),B==="cost"&&(v.type==="custom"&&v.customStart&&v.customEnd?(w.set("costTimeRange","custom"),w.set("costStartDate",v.customStart),w.set("costEndDate",v.customEnd)):w.set("costTimeRange",v.preset||"7days")),v.type==="custom"&&v.customStart&&v.customEnd?(w.set("startDate",v.customStart),w.set("endDate",v.customEnd),w.set("timeRange","custom")):v.preset==="all"?w.set("timeRange","all"):w.set("timeRange",v.preset);const O=await Ya(w.toString());O.success&&(P.value=((t=O.data)==null?void 0:t.items)||[],(m=O.data)!=null&&m.pagination&&(a.value=O.data.pagination,ye.value>a.value.totalPages&&a.value.totalPages>0&&(ye.value=a.value.totalPages)),(r=O.data)!=null&&r.availableTags&&(ie.value=O.data.availableTags),Qs(),Js())}catch{R("加载 API Keys 失败","error")}finally{X.value=!1}},Qs=async()=>{const s=P.value;if(!s||s.length===0)return;let t=v.preset,m=null,r=null;v.type==="custom"&&v.customStart&&v.customEnd&&(t="custom",m=v.customStart,r=v.customEnd);const w=s.filter(B=>{const O=Z.value.get(B.id);return!O||O.timeRange!==t||t==="custom"&&(O.startDate!==m||O.endDate!==r)});if(w.length===0)return;const q=w.map(B=>B.id);q.forEach(B=>V.value.add(B));try{const B={keyIds:q,timeRange:t};t==="custom"&&(B.startDate=m,B.endDate=r);const O=await er(B);if(O.success&&O.data)for(const[me,fe]of Object.entries(O.data))Z.value.set(me,{stats:fe,timeRange:t,startDate:m,endDate:r,timestamp:Date.now()})}catch(B){console.error("加载统计数据失败:",B)}finally{q.forEach(B=>V.value.delete(B))}},ve=s=>{const t=Z.value.get(s);return(t==null?void 0:t.stats)||null},Ze=s=>V.value.has(s),Js=async()=>{const s=P.value;if(!s||s.length===0)return;const t=s.filter(r=>!(!r.lastUsedAt||D.value.has(r.id)));if(t.length===0)return;const m=t.map(r=>r.id);m.forEach(r=>U.value.add(r));try{const r=await tr({keyIds:m});if(r.success&&r.data)for(const[w,q]of Object.entries(r.data))D.value.set(w,q)}catch(r){console.error("加载最后使用账号数据失败:",r)}finally{m.forEach(r=>U.value.delete(r))}},Xs=s=>D.value.get(s)||null,It=s=>U.value.has(s),Kt=async()=>{se.value="deleted",ee.value=!0;try{const s=await Ja();s.success&&(G.value=s.apiKeys||[])}catch{R("加载已删除的 API Keys 失败","error")}finally{ee.value=!1}},nt=s=>{if(s==="cost"){if(!Lt.value){R("费用排序索引正在更新中,请稍后重试","warning");return}v.type==="custom"&&R("正在计算费用排序,可能需要几秒钟...","info")}te.value===s?H.value=H.value==="asc"?"desc":"asc":(te.value=s,H.value=s==="cost"?"desc":"asc")},Lt=j(()=>{if(v.type==="custom")return!0;const s=v.preset,t=T.value[s];return(t==null?void 0:t.status)==="ready"}),Zs=j(()=>{if(v.type==="custom")return"点击按费用排序(实时计算,可能需要几秒钟)";const s=v.preset,t=T.value[s];return t?t.status==="updating"?"费用排序索引正在更新中...":t.status==="ready"?`点击按费用排序(索引更新于: ${t.lastUpdate?new Date(t.lastUpdate).toLocaleString():"未知"})`:"费用排序索引状态未知":"费用排序索引未初始化"});let it=null;const ps=async()=>{try{const s=await Ha();s.success&&(T.value=s.data||{},ea())}catch(s){console.error("Failed to fetch cost sort status:",s)}},ea=()=>{it&&clearTimeout(it);const t=Object.values(T.value).some(m=>(m==null?void 0:m.status)==="updating")?1e4:6e4;it=setTimeout(ps,t)},Me=s=>!s&&s!==0?"0":s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),gt=s=>{if(!s)return"未知账户";if(s.startsWith("group:")){const O=s.substring(6),me=b.value.claudeGroups.find(we=>we.id===O);if(me)return`分组-${me.name}`;const fe=b.value.geminiGroups.find(we=>we.id===O);if(fe)return`分组-${fe.name}`;const g=b.value.openaiGroups.find(we=>we.id===O);if(g)return`分组-${g.name}`;const ke=b.value.droidGroups.find(we=>we.id===O);return ke?`分组-${ke.name}`:`分组-${O.substring(0,8)}`}const t=b.value.claude.find(O=>O.id===s);if(t)return`${t.name}`;if(s.startsWith("api:")){const O=s.replace("api:",""),me=b.value.gemini.find(fe=>fe.id===O&&fe.platform==="gemini-api");return me?`${me.name}`:`${O.substring(0,8)}`}const m=b.value.gemini.find(O=>O.id===s);if(m)return`${m.name}`;if(s.startsWith("responses:")){const O=s.replace("responses:",""),me=b.value.openaiResponses.find(fe=>fe.id===O);return me?`${me.name}`:`${O.substring(0,8)}`}const r=b.value.openai.find(O=>O.id===s);if(r)return`${r.name}`;const w=b.value.openaiResponses.find(O=>O.id===s);if(w)return`${w.name}`;const q=b.value.bedrock.find(O=>O.id===s);if(q)return`${q.name}`;const B=b.value.droid.find(O=>O.id===s);return B?`${B.name}`:`${s.substring(0,8)}`},ta=s=>!!(s.claudeAccountId||s.claudeConsoleAccountId||s.geminiAccountId||s.openaiAccountId||s.bedrockAccountId||s.droidAccountId),ms=s=>{if(s.claudeAccountId){const t=gt(s.claudeAccountId);if(s.claudeAccountId.startsWith("group:"))return t;const m=b.value.claude.find(r=>r.id===s.claudeAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}if(s.claudeConsoleAccountId){const t=b.value.claude.find(m=>m.id===s.claudeConsoleAccountId&&m.platform==="claude-console");return t?`Console-${t.name}`:"⚠️ Console账户不存在"}return""},xs=s=>{if(s.geminiAccountId){const t=gt(s.geminiAccountId);if(s.geminiAccountId.startsWith("group:"))return t;if(s.geminiAccountId.startsWith("api:")){const r=s.geminiAccountId.replace("api:",""),w=b.value.gemini.find(q=>q.id===r&&q.platform==="gemini-api");return w?w.accountType==="dedicated"?`🔒 API专属-${t}`:`API-${t}`:`⚠️ ${t} (账户不存在)`}const m=b.value.gemini.find(r=>r.id===s.geminiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},ys=s=>{if(s.openaiAccountId){const t=gt(s.openaiAccountId);if(s.openaiAccountId.startsWith("group:"))return t;let m=null;if(s.openaiAccountId.startsWith("responses:")){const r=s.openaiAccountId.replace("responses:","");m=b.value.openaiResponses.find(w=>w.id===r)}else m=b.value.openai.find(r=>r.id===s.openaiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},fs=s=>{if(s.bedrockAccountId){const t=gt(s.bedrockAccountId);if(s.bedrockAccountId.startsWith("group:"))return t;const m=b.value.bedrock.find(r=>r.id===s.bedrockAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},bs=s=>{if(s.droidAccountId){const t=gt(s.droidAccountId);if(s.droidAccountId.startsWith("group:"))return t;const m=b.value.droid.find(r=>r.id===s.droidAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},pt=s=>s?new Date(s)<new Date:!1,mt=s=>!s||pt(s)?!1:(new Date(s)-new Date)/(1e3*60*60*24)<=7,vs=s=>s?new Date(s).toLocaleDateString("zh-CN"):"",ks=async s=>{C.value[s]?C.value[s]=!1:(C.value[s]=!0,d.value[s]||As(s),await Dt(s,!0))},Dt=async(s,t=!1)=>{if(!t&&x.value[s]&&x.value[s].length>0)return;const m=He(s);try{const r={};m.customStart&&m.customEnd?(r.startDate=m.customStart,r.endDate=m.customEnd,r.period="custom"):r.period=m.preset==="today"||m.preset==="7days"?"daily":"monthly";const w=await rr(s,r);w.success&&(x.value[s]=w.data||[])}catch{R("加载模型统计失败","error"),x.value[s]=[]}},ws=(s,t)=>{const m=t.reduce((r,w)=>r+(w.allTokens||0),0);return m===0?0:Math.round(s/m*100)},sa=s=>s.formatted&&s.formatted.total?s.formatted.total:s.cost!==void 0?`$${s.cost.toFixed(6)}`:"$0.000000",aa=s=>{var t,m,r,w,q,B;if(v.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(v.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.requests)||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].requests!==void 0?s.usage["7days"].requests:0;if(v.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 v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.requests!==void 0?s.usage.all.requests:((w=(r=s.usage)==null?void 0:r.total)==null?void 0:w.requests)||0:((B=(q=s.usage)==null?void 0:q.total)==null?void 0:B.requests)||0}},ra=s=>{if(v.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(v.preset==="today")return s.dailyCost||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].cost!==void 0?s.usage["7days"].cost:s.weeklyCost||s.periodCost||0;if(v.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 v.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}},oa=s=>{var t,m,r,w,q,B;if(v.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(v.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.tokens)||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].tokens!==void 0?s.usage["7days"].tokens:0;if(v.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 v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.tokens!==void 0?s.usage.all.tokens:((w=(r=s.usage)==null?void 0:r.total)==null?void 0:w.tokens)||0:((B=(q=s.usage)==null?void 0:q.total)==null?void 0:B.tokens)||0}},la=s=>{var t,m,r,w,q,B;if(v.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(v.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.inputTokens)||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].inputTokens!==void 0?s.usage["7days"].inputTokens:0;if(v.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 v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.inputTokens!==void 0?s.usage.all.inputTokens:((w=(r=s.usage)==null?void 0:r.total)==null?void 0:w.inputTokens)||0:((B=(q=s.usage)==null?void 0:q.total)==null?void 0:B.inputTokens)||0}},na=s=>{var t,m,r,w,q,B;if(v.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(v.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.outputTokens)||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].outputTokens!==void 0?s.usage["7days"].outputTokens:0;if(v.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 v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.outputTokens!==void 0?s.usage.all.outputTokens:((w=(r=s.usage)==null?void 0:r.total)==null?void 0:w.outputTokens)||0:((B=(q=s.usage)==null?void 0:q.total)==null?void 0:B.outputTokens)||0}},ia=s=>{if(!x.value[s.id])return ra(s);const t=x.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 w=r.formatted.total.replace("$","").replace(",",""),q=parseFloat(w);isNaN(q)||(m+=q)}}),m},da=s=>{if(hs(s),te.value==="cost"){if(s==="custom")return;const t=T.value[s];(!t||t.status!=="ready")&&(te.value="createdAt",H.value="desc",R("当前时间范围的费用排序索引未就绪,已切换到默认排序","info"))}},hs=s=>{if(v.preset=s,s==="custom"){if(v.type="custom",!v.customRange){const t=new Date,m=new Date(t);m.setDate(t.getDate()-6);const r=w=>w.getFullYear()+"-"+String(w.getMonth()+1).padStart(2,"0")+"-"+String(w.getDate()).padStart(2,"0")+" 00:00:00";v.customRange=[r(m),r(t)],v.customStart=m.toISOString().split("T")[0],v.customEnd=t.toISOString().split("T")[0]}}else if(s==="all")v.type="preset",v.customStart=null,v.customEnd=null;else{v.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),v.customStart=m.toISOString().split("T")[0],v.customEnd=t.toISOString().split("T")[0]}Ke()},ua=s=>{s&&s.length===2?(v.type="custom",v.preset="custom",v.customRange=s,v.customStart=s[0].split(" ")[0],v.customEnd=s[1].split(" ")[0],Ke()):s===null&&hs("today")},As=s=>{const t=new Date;new Date(t).setHours(0,0,0,0),d.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}]}},He=s=>(d.value[s]||As(s),d.value[s]),Cs=(s,t)=>{const m=He(t);m.type="preset",m.preset=s;const r=m.presetOptions.find(w=>w.value===s);if(r)if(s==="custom"){if(m.type="custom",!m.customRange){const w=new Date,q=new Date(w);q.setDate(w.getDate()-6);const B=O=>O.getFullYear()+"-"+String(O.getMonth()+1).padStart(2,"0")+"-"+String(O.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[B(q),B(w)],m.customStart=q.toISOString().split("T")[0],m.customEnd=w.toISOString().split("T")[0]}}else{const w=new Date,q=new Date(w);q.setDate(w.getDate()-(r.days-1)),m.customStart=q.toISOString().split("T")[0],m.customEnd=w.toISOString().split("T")[0];const B=O=>O.getFullYear()+"-"+String(O.getMonth()+1).padStart(2,"0")+"-"+String(O.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[B(q),B(w)]}Dt(t,!0)},ca=(s,t)=>{const m=He(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],Dt(s,!0)):t===null&&Cs("7days",s)},$s=s=>s>new Date,ga=s=>{const t=He(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,Dt(s,!0),R("已重置筛选条件并刷新数据","info")},pa=()=>{ze.value=!0,xe.value||$t()},Nt=s=>{ns.value=s,We.value=!0,xe.value||$t()},Ht=s=>{is.value=s,Ne.value=!0},ma=s=>{ze.value=!1,ds.value=s,pe.value=!0,Ke()},xa=s=>{ze.value=!1,us.value=s,Ee.value=!0,Ke()},ya=()=>{if(I.value.length===0){R("请先选择要编辑的 API Keys","warning");return}ht.value=!0,xe.value||$t()},fa=()=>{ht.value=!1,I.value=[],je(),Ke()},ba=()=>{We.value=!1,R("API Key 更新成功","success"),Ke()},va=()=>{Ne.value=!1,R("API Key 续期成功","success"),Ke()},ka=s=>{const t=[{key:"edit",label:"编辑",icon:"fa-edit",color:"blue",handler:()=>Nt(s)}];return s.expiresAt&&(pt(s.expiresAt)||mt(s.expiresAt))&&t.push({key:"renew",label:"续期",icon:"fa-clock",color:"green",handler:()=>Ht(s)}),t.push({key:"toggle",label:s.isActive?"禁用":"激活",icon:s.isActive?"fa-ban":"fa-check-circle",color:s.isActive?"orange":"green",handler:()=>Yt(s)}),t.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>Qt(s.id)}),t},Yt=async s=>{let t=!0;if(s.isActive&&(t=await ot("禁用 API Key",`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`,"确定禁用","取消","warning")),!!t)try{const m=await Vt(s.id,{isActive:!s.isActive});if(m.success){R(`API Key 已${s.isActive?"禁用":"激活"}`,"success");const r=P.value.find(w=>w.id===s.id);r&&(r.isActive=!s.isActive)}else R(m.message||"操作失败","error")}catch{R("操作失败","error")}},Qt=async s=>{if(await ot("删除 API Key","确定要删除这个 API Key 吗?此操作不可恢复。","确定删除","取消","danger"))try{const m=await qs(s);if(m.success){R("API Key 已删除","success");const r=I.value.indexOf(s);r>-1&&I.value.splice(r,1),je(),Ke()}else R(m.message||"删除失败","error")}catch{R("删除失败","error")}},wa=async s=>{var m,r;if(await ot("恢复 API Key","确定要恢复这个 API Key 吗?恢复后可以重新使用。","确定恢复","取消","primary"))try{const w=await sr(s);w.success?(R("API Key 已成功恢复","success"),await Kt(),await Ke()):R(w.error||"恢复失败","error")}catch(w){R(((r=(m=w.response)==null?void 0:m.data)==null?void 0:r.error)||"恢复失败","error")}},ha=async s=>{var m,r;if(await ot("彻底删除 API Key","确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。","确定彻底删除","取消","danger"))try{const w=await ar(s);w.success?(R("API Key 已彻底删除","success"),Kt()):R(w.error||"彻底删除失败","error")}catch(w){R(((r=(m=w.response)==null?void 0:m.data)==null?void 0:r.error)||"彻底删除失败","error")}},Aa=async()=>{var m,r;const s=G.value.length;if(s===0){R("没有需要清空的 API Keys","info");return}if(await ot("清空所有已删除的 API Keys",`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复,所有相关数据将被永久删除。`,"确定清空全部","取消","danger"))try{const w=await Za();w.success?(R(w.message||"已清空所有已删除的 API Keys","success"),w.details&&w.details.failedCount>0&&R(`${w.details.failedCount} 个清空失败`,"warning"),Kt()):R(w.error||"清空失败","error")}catch(w){R(((r=(m=w.response)==null?void 0:m.data)==null?void 0:r.error)||"清空失败","error")}},Ca=async()=>{const s=I.value.length;if(s===0){R("请先选择要删除的 API Keys","warning");return}if(!await ot("批量删除 API Keys",`确定要删除选中的 ${s} 个 API Key 吗?此操作不可恢复。`,"确定删除","取消","danger"))return;const m=[...I.value];try{const r=await Xa({keyIds:m});if(r.success){const{successCount:w,failedCount:q,errors:B}=r.data;if(w>0){if(R(`成功删除 ${w} 个 API Keys`,"success"),q>0){const O=B.map(me=>`${me.keyId}: ${me.error}`).join(`
|
||
`);R(`${q} 个删除失败:
|
||
${O}`,"warning")}}else R("所有 API Keys 删除失败","error");I.value=[],je(),Ke()}else R(r.message||"批量删除失败","error")}catch{R("批量删除失败","error")}},$a=()=>{if(z.value)lt.value.forEach(s=>{I.value.includes(s.id)||I.value.push(s.id)});else{const s=new Set(lt.value.map(t=>t.id));I.value=I.value.filter(t=>!s.has(t))}je()},je=()=>{const s=lt.value.length,t=lt.value.filter(m=>I.value.includes(m.id)).length;t===0?(z.value=!1,S.value=!1):t===s?(z.value=!0,S.value=!1):(z.value=!1,S.value=!0)},xt=s=>{Te.value=s},Is=()=>{Te.value=null},Ia=async({keyId:s,expiresAt:t,activateNow:m})=>{try{const r=await or(s,{expiresAt:t||null,activateNow:m||!1});if(r.success){R(m?"API Key已激活":"过期时间已更新","success");const w=P.value.find(q=>q.id===s);w&&(m&&r.updates?(w.isActivated=!0,w.activatedAt=r.updates.activatedAt,w.expiresAt=r.updates.expiresAt):(w.expiresAt=t||null,t&&!w.isActivated&&(w.isActivated=!0))),Is()}else R(r.message||"更新失败","error"),Ce.value&&Ce.value.resetSaving()}catch{R("更新失败","error"),Ce.value&&Ce.value.resetSaving()}},Ks=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`},Tt=s=>{var r,w,q,B,O,me,fe,g,ke,we,Le,ue,be,Mt,qe;const t=ve(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)??((q=(w=s.usage)==null?void 0:w.total)==null?void 0:q.requests)??0,tokens:(t==null?void 0:t.tokens)??((O=(B=s.usage)==null?void 0:B.total)==null?void 0:O.tokens)??0,cost:(t==null?void 0:t.allTimeCost)??((fe=(me=s.usage)==null?void 0:me.total)==null?void 0:fe.cost)??0,inputTokens:(t==null?void 0:t.inputTokens)??((ke=(g=s.usage)==null?void 0:g.total)==null?void 0:ke.inputTokens)??0,outputTokens:(t==null?void 0:t.outputTokens)??((Le=(we=s.usage)==null?void 0:we.total)==null?void 0:Le.outputTokens)??0,cacheCreateTokens:(t==null?void 0:t.cacheCreateTokens)??((be=(ue=s.usage)==null?void 0:ue.total)==null?void 0:be.cacheCreateTokens)??0,cacheReadTokens:(t==null?void 0:t.cacheReadTokens)??((qe=(Mt=s.usage)==null?void 0:Mt.total)==null?void 0:qe.cacheReadTokens)??0}}};i.value=m,N.value=!0},Ka=s=>{var m;const t=s||((m=i.value)==null?void 0:m.id);t&&(N.value=!1,J.push(`/api-keys/${t}/usage-records`))},Jt=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")},Xt={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,Ls=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"},_t=s=>{if(!s)return null;const t=Xs(s.id);return t!==null?t:s.lastUsage||null},Zt=s=>{if(It(s==null?void 0:s.id))return!1;const t=_t(s);return!!(t&&(t.accountName||t.accountId||t.rawAccountId))},es=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 w=La.test(t),q=!m||m===t,B=Ls(r);return w&&q&&(!r||r==="unknown"||B==="other")},Da=s=>s?es(s)?"已删除":s.accountName||s.accountId||s.rawAccountId||"未知账号":"未知账号",yt=s=>Da(_t(s)),ts=s=>{const t=yt(s);return t.length>Ps?`${t.slice(0,Ps)}...`:t},St=s=>{const t=_t(s);if(es(t))return Xt.deleted;const m=(t==null?void 0:t.accountCategory)||Ls(t==null?void 0:t.accountType);return Xt[m]||Xt.other},ss=s=>{const t=_t(s);return es(t)},Ta=()=>{l.value="",ye.value=1},_a=()=>{try{const s=Ct.value.map(g=>{var Ds,Ts,_s,Ss,Ms,Us,Rs,Vs;const ke=aa(g),we=ia(g),Le=oa(g),ue=la(g),be=na(g),Mt={ID:g.id||"",名称:g.name||"",描述:g.description||"",状态:g.isActive?"启用":"禁用",API密钥:g.apiKey||"",过期模式:g.expirationMode==="activation"?"首次使用后激活":g.expirationMode==="fixed"?"固定时间":"无",激活期限:g.activationDays||"",激活单位:g.activationUnit==="hours"?"小时":g.activationUnit==="days"?"天":"",已激活:g.isActivated?"是":"否",激活时间:g.activatedAt?Pe(g.activatedAt):"",过期时间:g.expiresAt?Pe(g.expiresAt):"",服务权限:(()=>{const Ge=g.permissions;return!Ge||Ge==="all"?"全部服务":Array.isArray(Ge)?Ge.length===0?"全部服务":Ge.join(", "):Ge})(),令牌限制:g.tokenLimit==="0"||g.tokenLimit===0?"无限制":g.tokenLimit||"",并发限制:g.concurrencyLimit==="0"||g.concurrencyLimit===0?"无限制":g.concurrencyLimit||"","速率窗口(分钟)":g.rateLimitWindow==="0"||g.rateLimitWindow===0?"无限制":g.rateLimitWindow||"",速率请求限制:g.rateLimitRequests==="0"||g.rateLimitRequests===0?"无限制":g.rateLimitRequests||"","日费用限制($)":g.dailyCostLimit==="0"||g.dailyCostLimit===0?"无限制":`$${g.dailyCostLimit}`||"","总费用限制($)":g.totalCostLimit==="0"||g.totalCostLimit===0?"无限制":`$${g.totalCostLimit}`||"",Claude专属账户:g.claudeAccountId||"",Claude控制台账户:g.claudeConsoleAccountId||"",Gemini专属账户:g.geminiAccountId||"",OpenAI专属账户:g.openaiAccountId||"","Azure OpenAI专属账户":g.azureOpenaiAccountId||"",Bedrock专属账户:g.bedrockAccountId||"",Droid专属账户:g.droidAccountId||"",启用模型限制:g.enableModelRestriction?"是":"否",限制的模型:g.restrictedModels&&g.restrictedModels.length>0?g.restrictedModels.join("; "):"",启用客户端限制:g.enableClientRestriction?"是":"否",允许的客户端:g.allowedClients&&g.allowedClients.length>0?g.allowedClients.join("; "):"",创建时间:g.createdAt?Pe(g.createdAt):"",创建者:g.createdBy||"",用户ID:g.userId||"",用户名:g.userUsername||"",标签:g.tags&&g.tags.length>0?g.tags.join(", "):"无",请求总数:ke,"总费用($)":we.toFixed(2),Token数:Me(Le),输入Token:Me(ue),输出Token:Me(be),最后使用时间:g.lastUsedAt?Pe(g.lastUsedAt):"从未使用",最后使用账号:yt(g),最后使用类型:St(g)},qe={};let dt=null;return v.preset==="today"?dt=(Ts=(Ds=g.usage)==null?void 0:Ds.daily)==null?void 0:Ts.models:v.preset==="7days"?dt=(Ss=(_s=g.usage)==null?void 0:_s.weekly)==null?void 0:Ss.models:v.preset==="30days"?dt=(Us=(Ms=g.usage)==null?void 0:Ms.monthly)==null?void 0:Us.models:v.preset==="all"&&(dt=(Vs=(Rs=g.usage)==null?void 0:Rs.total)==null?void 0:Vs.models),dt&&Object.entries(dt).forEach(([Ge,ft])=>{let Ye=Ge;Ge.includes(":")&&(Ye=Ge.split(":").pop()),Ye=Ye.replace(/[:/]/g,"_"),qe[`${Ye}_请求数`]=ft.requests||0,qe[`${Ye}_费用($)`]=(ft.cost||0).toFixed(2),qe[`${Ye}_Token`]=Me(ft.totalTokens||0),qe[`${Ye}_输入Token`]=Me(ft.inputTokens||0),qe[`${Ye}_输出Token`]=Me(ft.outputTokens||0)}),{...Mt,...qe}}),t=et.utils.book_new(),m=et.utils.json_to_sheet(s),r=et.utils.decode_range(m["!ref"]),w=Object.keys(s[0]||{}),q=w.map(g=>g==="ID"?{wch:40}:g==="名称"?{wch:25}:g==="描述"?{wch:30}:g==="API密钥"?{wch:45}:g==="标签"?{wch:20}:g.includes("时间")?{wch:20}:g.includes("限制")?{wch:15}:g.includes("费用")?{wch:15}:g.includes("Token")?{wch:15}:g.includes("请求")?{wch:12}:g.includes("账户")?{wch:30}:g.includes("权限")||g.includes("模型")||g.includes("客户端")?{wch:20}:g.includes("激活")||g.includes("过期")?{wch:18}:{wch:15});m["!cols"]=q;for(let g=r.s.c;g<=r.e.c;++g){const ke=et.utils.encode_cell({r:0,c:g});if(!m[ke])continue;const we=w[g],Le=we&&we.includes("_");m[ke].s={fill:{fgColor:{rgb:Le?"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 g=1;g<=r.e.r;++g)for(let ke=r.s.c;ke<=r.e.c;++ke){const we=et.utils.encode_cell({r:g,c:ke});if(!m[we])continue;const Le=w[ke],ue=m[we].v,be={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"}}}};g%2===0&&(be.fill={fgColor:{rgb:"F2F2F2"}}),Le==="名称"?be.alignment={horizontal:"left",vertical:"center"}:Le==="标签"?(be.alignment={horizontal:"left",vertical:"center"},ue==="无"&&(be.font={...be.font,color:{rgb:"999999"},italic:!0})):Le==="最后使用时间"?(be.alignment={horizontal:"right",vertical:"center"},ue==="从未使用"&&(be.font={...be.font,color:{rgb:"999999"},italic:!0})):Le&&Le.includes("费用")?(be.alignment={horizontal:"right",vertical:"center"},be.font={...be.font,color:{rgb:"0066CC"},bold:!0}):Le&&(Le.includes("Token")||Le.includes("请求"))&&(be.alignment={horizontal:"right",vertical:"center"}),m[we].s=be}et.utils.book_append_sheet(t,m,"用量统计");const B=new Date,O=B.getFullYear()+String(B.getMonth()+1).padStart(2,"0")+String(B.getDate()).padStart(2,"0")+"_"+String(B.getHours()).padStart(2,"0")+String(B.getMinutes()).padStart(2,"0")+String(B.getSeconds()).padStart(2,"0");let me="";v.type==="preset"?me={today:"今日","7days":"最近7天","30days":"最近30天",all:"全部时间"}[v.preset]||v.preset:me="自定义时间";const fe=`API_Keys_用量统计_${me}_${O}.xlsx`;et.writeFile(t,fe),R(`成功导出 ${s.length} 条API Key用量数据`,"success")}catch{R("导出失败,请重试","error")}};Re([k,Q],()=>{ye.value=1,I.value=[],je()});let as=null;return Re(l,()=>{as&&clearTimeout(as),as=setTimeout(()=>{ye.value=1,Ke(!1)},300)}),Re(y,()=>{ye.value=1,Ke(!1)}),Re(k,()=>{ye.value=1,Ke(!1)}),Re(ae,()=>{ye.value=1,Ke(!1)}),Re([te,H],()=>{Ke(!1)}),Re([ye,ce],([s,t],[m,r])=>{(s!==m||t!==r)&&Ke(!1),je()}),Re(ce,s=>{localStorage.setItem("apiKeysPageSize",s.toString())}),Re(P,()=>{const s=new Set(P.value.map(t=>t.id));I.value=I.value.filter(t=>s.has(t)),je()}),wt(async()=>{ps(),await Promise.all([Ke(),Ys()]),je(),$t()}),Os(()=>{it&&(clearTimeout(it),it=null)}),(s,t)=>{const m=Sa;return o(),n("div",vu,[e("div",ku,[e("div",wu,[t[159]||(t[159]=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",hu,[e("nav",Au,[e("button",{class:F(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",se.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=>se.value="active")},[t[32]||(t[32]=K(" 活跃 API Keys ",-1)),P.value.length>0?(o(),n("span",Cu,u(P.value.length),1)):$("",!0)],2),e("button",{class:F(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",se.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:Kt},[t[33]||(t[33]=K(" 已删除 API Keys ",-1)),G.value.length>0?(o(),n("span",$u,u(G.value.length),1)):$("",!0)],2)])]),se.value==="active"?(o(),n("div",Iu,[e("div",Ku,[e("div",Lu,[e("div",Du,[t[34]||(t[34]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ne(Ut,{modelValue:v.preset,"onUpdate:modelValue":t[1]||(t[1]=r=>v.preset=r),icon:"fa-calendar-alt","icon-color":"text-blue-500",options:M.value,placeholder:"选择时间范围",onChange:da},null,8,["modelValue","options"])]),v.type==="custom"?(o(),n("div",Tu,[ne(m,{class:"api-key-date-picker custom-date-range-picker",clearable:!0,"default-time":p.value,"disabled-date":$s,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":v.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":ua},null,8,["default-time","model-value"])])):$("",!0),e("div",_u,[t[35]||(t[35]=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",Su,[ne(Ut,{modelValue:k.value,"onUpdate:modelValue":t[2]||(t[2]=r=>k.value=r),icon:"fa-tags","icon-color":"text-purple-500",options:Ue.value,placeholder:"所有标签"},null,8,["modelValue","options"]),k.value?(o(),n("span",Mu,u(Be.value),1)):$("",!0)])]),e("div",Uu,[t[36]||(t[36]=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",Ru,[ne(Ut,{modelValue:ae.value,"onUpdate:modelValue":t[3]||(t[3]=r=>ae.value=r),icon:"fa-cube","icon-color":"text-orange-500",multiple:!0,options:Se.value,placeholder:"所有模型"},null,8,["modelValue","options"]),ae.value.length>0?(o(),n("span",Vu,u(ae.value.length),1)):$("",!0)])]),e("div",Pu,[e("div",Eu,[ne(Ut,{modelValue:y.value,"onUpdate:modelValue":t[4]||(t[4]=r=>y.value=r),icon:"fa-filter","icon-color":"text-cyan-500",options:de.value,placeholder:"选择搜索类型"},null,8,["modelValue","options"])]),e("div",Ou,[t[39]||(t[39]=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",ju,[_(e("input",{"onUpdate:modelValue":t[5]||(t[5]=r=>l.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:y.value==="bindingAccount"?"搜索所属账号...":Y.value?"搜索名称或所有者...":"搜索名称...",type:"text"},null,8,Gu),[[le,l.value]]),t[38]||(t[38]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),l.value?(o(),n("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:Ta},t[37]||(t[37]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):$("",!0)])])])]),e("div",zu,[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:X.value,onClick:t[6]||(t[6]=r=>Ke())},[t[40]||(t[40]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:F(["fas relative text-green-500",X.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),t[41]||(t[41]=e("span",{class:"relative"},"刷新",-1))],8,qu),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:f},[e("i",{class:F(W.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(W.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:_a},t[42]||(t[42]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-emerald-500 to-green-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-file-excel relative text-emerald-500"},null,-1),e("span",{class:"relative"},"导出数据",-1)])),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:t[7]||(t[7]=r=>Wt.value=!0)},t[43]||(t[43]=[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("i",{class:"fas fa-tags relative text-purple-500"},null,-1),e("span",{class:"relative"},"管理标签",-1)])),I.value.length>0?(o(),n("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[8]||(t[8]=r=>ya())},[t[44]||(t[44]=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[45]||(t[45]=e("i",{class:"fas fa-edit relative text-blue-600 dark:text-blue-400"},null,-1)),e("span",Fu,"编辑选中 ("+u(I.value.length)+")",1)])):$("",!0),I.value.length>0?(o(),n("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[9]||(t[9]=r=>Ca())},[t[46]||(t[46]=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[47]||(t[47]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Bu,"删除选中 ("+u(I.value.length)+")",1)])):$("",!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(pa,["stop"])},t[48]||(t[48]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"创建新 Key",-1)]))])]),X.value?(o(),n("div",Wu,t[49]||(t[49]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载 API Keys...",-1)]))):P.value.length===0?(o(),n("div",Nu,t[50]||(t[50]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-key text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"点击上方按钮创建您的第一个 API Key",-1)]))):(o(),n("div",Hu,[e("div",Yu,[e("table",Qu,[e("thead",Ju,[e("tr",null,[L.value?(o(),n("th",Xu,[e("div",Zu,[_(e("input",{"onUpdate:modelValue":t[10]||(t[10]=r=>z.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:S.value,type:"checkbox",onChange:$a},null,40,ec),[[Ie,z.value]])])])):$("",!0),e("th",{class:F(["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",L.value?"left-[50px]":"left-0"]),onClick:t[11]||(t[11]=r=>nt("name"))},[t[51]||(t[51]=K(" 名称 ",-1)),te.value==="name"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",tc))],2),t[57]||(t[57]=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[58]||(t[58]=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[12]||(t[12]=r=>nt("status"))},[t[52]||(t[52]=K(" 状态 ",-1)),te.value==="status"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",sc))]),e("th",{class:F(["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":Lt.value,"cursor-not-allowed opacity-60":!Lt.value}]),title:Zs.value,onClick:t[13]||(t[13]=r=>nt("cost"))},[t[53]||(t[53]=K(" 费用 ",-1)),te.value==="cost"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):Lt.value?(o(),n("i",rc)):(o(),n("i",oc))],10,ac),t[59]||(t[59]=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[60]||(t[60]=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[61]||(t[61]=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[14]||(t[14]=r=>nt("lastUsedAt"))},[t[54]||(t[54]=K(" 最后使用 ",-1)),te.value==="lastUsedAt"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",lc))]),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=>nt("createdAt"))},[t[55]||(t[55]=K(" 创建时间 ",-1)),te.value==="createdAt"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",nc))]),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[16]||(t[16]=r=>nt("expiresAt"))},[t[56]||(t[56]=K(" 过期时间 ",-1)),te.value==="expiresAt"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",ic))]),t[62]||(t[62]=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,[(o(!0),n(re,null,ge(lt.value,r=>{var w,q,B,O,me,fe;return o(),n(re,{key:r.id},[e("tr",dc,[L.value?(o(),n("td",uc,[e("div",cc,[_(e("input",{"onUpdate:modelValue":t[17]||(t[17]=g=>I.value=g),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:je},null,40,gc),[[Ie,I.value]])])])):$("",!0),e("td",{class:F(["name-column sticky z-10 px-3 py-3",L.value?"left-[50px]":"left-0"])},[e("div",pc,[e("div",{class:"cursor-pointer truncate text-sm font-semibold text-gray-900 hover:text-blue-600 dark:text-gray-100 dark:hover:text-blue-400",title:"点击复制",onClick:$e(g=>Ae(rs)(r.name),["stop"])},u(r.name),9,mc),Y.value&&r.ownerDisplayName?(o(),n("div",xc,[t[63]||(t[63]=e("i",{class:"fas fa-user mr-1"},null,-1)),K(" "+u(r.ownerDisplayName),1)])):$("",!0)])],2),e("td",yc,[e("div",fc,[oe.value&&ta(r)?(o(),n("div",bc,t[64]||(t[64]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),K(" 加载中... ",-1)]))):(o(),n(re,{key:1},[r.claudeAccountId||r.claudeConsoleAccountId?(o(),n("div",vc,[t[65]||(t[65]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-1.5 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1 text-[10px]"}),K(" Claude ")],-1)),e("span",kc,u(ms(r)),1)])):$("",!0),r.geminiAccountId?(o(),n("div",wc,[t[66]||(t[66]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-1.5 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),K(" Gemini ")],-1)),e("span",hc,u(xs(r)),1)])):$("",!0),r.openaiAccountId?(o(),n("div",Ac,[t[67]||(t[67]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-1.5 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1 text-[10px]"}),K(" OpenAI ")],-1)),e("span",Cc,u(ys(r)),1)])):$("",!0),r.bedrockAccountId?(o(),n("div",$c,[t[68]||(t[68]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-1.5 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1 text-[10px]"}),K(" Bedrock ")],-1)),e("span",Ic,u(fs(r)),1)])):$("",!0),r.droidAccountId?(o(),n("div",Kc,[t[69]||(t[69]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-1.5 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),K(" Droid ")],-1)),e("span",Lc,u(bs(r)),1)])):$("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(o(),n("div",Dc,t[70]||(t[70]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),K(" 共享池 ",-1)]))):$("",!0)],64))])]),e("td",Tc,[e("div",_c,[(o(!0),n(re,null,ge(r.tags||[],g=>(o(),n("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"},u(g),1))),128)),!r.tags||r.tags.length===0?(o(),n("span",Sc,"无标签")):$("",!0)])]),e("td",Mc,[e("span",{class:F(["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:F(["mr-2 h-2 w-2 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),K(" "+u(r.isActive?"活跃":"禁用"),1)],2)]),e("td",Uc,[Ze(r.id)?(o(),n("div",Rc,t[71]||(t[71]=[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)]))):ve(r.id)?(o(),n("span",Vc,u(ve(r.id).formattedCost||"$0.00"),1)):(o(),n("span",Pc,"-"))]),e("td",Ec,[e("div",Oc,[Ze(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(o(),n("div",jc,t[72]||(t[72]=[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)]))):(o(),n(re,{key:1},[r.dailyCostLimit>0?(o(),he(Fe,{key:0,current:((w=ve(r.id))==null?void 0:w.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(o(),he(Fe,{key:1,current:((q=ve(r.id))==null?void 0:q.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)?(o(),n("div",Gc,[ne(Fe,{current:((B=ve(r.id))==null?void 0:B.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",zc,[e("div",qc,[t[73]||(t[73]=e("i",{class:"fas fa-clock text-[10px]"},null,-1)),e("span",Fc,u(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:F(["font-bold",(((O=ve(r.id))==null?void 0:O.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},u((((me=ve(r.id))==null?void 0:me.windowRemainingSeconds)||0)>0?Ks(((fe=ve(r.id))==null?void 0:fe.windowRemainingSeconds)||0):"未激活"),3)])])):(o(),n("div",Bc,t[74]||(t[74]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("td",Wc,[Ze(r.id)?(o(),n("div",Nc,t[75]||(t[75]=[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)]))):ve(r.id)?(o(),n("div",Hc,[e("span",Yc,u(Me(ve(r.id).tokens||0)),1)])):(o(),n("span",Qc,"-"))]),e("td",Jc,[Ze(r.id)?(o(),n("div",Xc,t[76]||(t[76]=[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)]))):ve(r.id)?(o(),n("div",Zc,[e("span",eg,u(Ae(vt)(ve(r.id).requests||0)),1),t[77]||(t[77]=e("span",{class:"text-xs text-gray-500"},"次",-1))])):(o(),n("span",tg,"-"))]),e("td",sg,[e("div",ag,[r.lastUsedAt?(o(),n("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},u(Jt(r.lastUsedAt)),9,rg)):(o(),n("span",og,"从未使用")),r.lastUsedAt&&It(r.id)?(o(),n("span",lg,t[78]||(t[78]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),K(" 加载中... ",-1)]))):Zt(r)?(o(),n("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:yt(r)},[K(u(ts(r))+" ",1),ss(r)?$("",!0):(o(),n("span",ig," ("+u(St(r))+") ",1))],8,ng)):(o(),n("span",dg," 暂无使用账号 "))])]),e("td",ug,u(new Date(r.createdAt).toLocaleDateString()),1),e("td",cg,[e("div",gg,[r.expirationMode==="activation"&&!r.isActivated?(o(),n("span",pg,[t[79]||(t[79]=e("i",{class:"fas fa-pause-circle mr-1 text-xs"},null,-1)),K(" 未激活 ( "+u(r.activationDays||(r.activationUnit==="hours"?24:30))+u(r.activationUnit==="hours"?"小时":"天")+") ",1)])):r.expiresAt?(o(),n("span",mg,[pt(r.expiresAt)?(o(),n("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:$e(g=>xt(r),["stop"])},t[80]||(t[80]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),K(" 已过期 ",-1)]),8,xg)):mt(r.expiresAt)?(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:$e(g=>xt(r),["stop"])},[t[81]||(t[81]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),K(" "+u(vs(r.expiresAt)),1)],8,yg)):(o(),n("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:$e(g=>xt(r),["stop"])},u(vs(r.expiresAt)),9,fg))])):(o(),n("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=>xt(r),["stop"])},t[82]||(t[82]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),K(" 永不过期 ",-1)]),8,bg))])]),e("td",vg,[e("div",kg,[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=>Tt(r)},t[83]||(t[83]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,wg),r&&r.id?(o(),n("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=>ks(r.id)},[e("i",{class:F(["fas",C.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2),t[84]||(t[84]=e("span",{class:"ml-1"},"模型",-1))],8,hg)):$("",!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=>Nt(r)},t[85]||(t[85]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Ag),r.expiresAt&&(pt(r.expiresAt)||mt(r.expiresAt))?(o(),n("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=>Ht(r)},t[86]||(t[86]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"续期",-1)]),8,Cg)):$("",!0),e("button",{class:F([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=>Yt(r)},[e("i",{class:F(["fas",r.isActive?"fa-ban":"fa-check-circle"])},null,2),e("span",Ig,u(r.isActive?"禁用":"激活"),1)],10,$g),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=>Qt(r.id)},t[87]||(t[87]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,Kg)]),e("div",Lg,[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=>Tt(r)},t[88]||(t[88]=[e("i",{class:"fas fa-chart-line"},null,-1)]),8,Dg),r&&r.id?(o(),n("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=>ks(r.id)},[e("i",{class:F(["fas",C.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2)],8,Tg)):$("",!0),ne(nr,{actions:ka(r)},null,8,["actions"])])])]),r&&r.id&&C.value[r.id]?(o(),n("tr",_g,[e("td",Sg,[x.value[r.id]?$("",!0):(o(),n("div",Mg,t[89]||(t[89]=[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",Ug,[e("div",Rg,[t[90]||(t[90]=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"}),K(" 模型使用分布 ")],-1)),e("div",Vg,[x.value[r.id]&&x.value[r.id].length>0?(o(),n("span",Pg,u(x.value[r.id].length)+" 个模型 ",1)):$("",!0),e("div",Eg,[e("div",Og,[(o(!0),n(re,null,ge(He(r.id).presetOptions,g=>(o(),n("button",{key:g.value,class:F(["rounded px-2 py-1 text-xs font-medium transition-colors",He(r.id).preset===g.value&&He(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:ke=>Cs(g.value,r.id)},u(g.label),11,jg))),128))]),ne(m,{class:"api-key-date-picker",clearable:!0,"default-time":p.value,"disabled-date":$s,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":He(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=>ca(r.id,g)},null,8,["default-time","model-value","onUpdate:modelValue"])])])]),x.value[r.id]&&x.value[r.id].length===0?(o(),n("div",Gg,[e("div",zg,[t[92]||(t[92]=e("i",{class:"fas fa-chart-line text-lg text-gray-400"},null,-1)),t[93]||(t[93]=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=>ga(r.id)},t[91]||(t[91]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),e("span",{class:"text-xs"},"刷新",-1)]),8,qg)]),t[94]||(t[94]=e("p",{class:"text-xs text-gray-400"}," 尝试调整时间范围或点击刷新重新加载数据 ",-1))])):x.value[r.id]&&x.value[r.id].length>0?(o(),n("div",Fg,[(o(!0),n(re,null,ge(x.value[r.id],g=>(o(),n("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",Bg,[e("div",Wg,[e("span",Ng,u(g.model),1),e("span",Hg,u(g.requests)+" 次请求",1)])]),e("div",Yg,[e("div",Qg,[t[95]||(t[95]=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"}),K(" 总Token: ")],-1)),e("span",Jg,u(Me(g.allTokens)),1)]),e("div",Xg,[t[96]||(t[96]=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"}),K(" 费用: ")],-1)),e("span",Zg,u(sa(g)),1)]),e("div",ep,[e("div",tp,[t[97]||(t[97]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-1 text-green-500"}),K(" 输入: ")],-1)),e("span",sp,u(Me(g.inputTokens)),1)]),e("div",ap,[t[98]||(t[98]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-1 text-blue-500"}),K(" 输出: ")],-1)),e("span",rp,u(Me(g.outputTokens)),1)]),g.cacheCreateTokens>0?(o(),n("div",op,[t[99]||(t[99]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-1"}),K(" 缓存创建: ")],-1)),e("span",lp,u(Me(g.cacheCreateTokens)),1)])):$("",!0),g.cacheReadTokens>0?(o(),n("div",np,[t[100]||(t[100]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-1"}),K(" 缓存读取: ")],-1)),e("span",ip,u(Me(g.cacheReadTokens)),1)])):$("",!0)])]),e("div",dp,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-indigo-500 to-purple-600 transition-all duration-500",style:Rt({width:ws(g.allTokens,x.value[r.id])+"%"})},null,4)]),e("div",up,[e("span",cp,u(ws(g.allTokens,x.value[r.id]))+"% ",1)])]))),128))])):$("",!0),x.value[r.id]&&x.value[r.id].length>0?(o(),n("div",gp,[e("div",pp,[t[103]||(t[103]=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"}),K(" 总计统计 ")],-1)),e("div",mp,[e("span",xp,[t[101]||(t[101]=K(" 总请求: ",-1)),e("span",yp,u(x.value[r.id].reduce((g,ke)=>g+ke.requests,0)),1)]),e("span",fp,[t[102]||(t[102]=K(" 总Token: ",-1)),e("span",bp,u(Me(x.value[r.id].reduce((g,ke)=>g+ke.allTokens,0))),1)])])])])):$("",!0)])])])):$("",!0)],64)}),128))])])])])),!X.value&&Ct.value.length>0?(o(),n("div",vp,[(o(!0),n(re,null,ge(lt.value,r=>{var w,q,B,O,me,fe;return o(),n("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",kp,[e("div",wp,[L.value?_((o(),n("input",{key:0,"onUpdate:modelValue":t[18]||(t[18]=g=>I.value=g),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:je},null,40,hp)),[[Ie,I.value]]):$("",!0),e("div",null,[e("h4",{class:"cursor-pointer text-sm font-semibold text-gray-900 hover:text-blue-600 dark:text-gray-100 dark:hover:text-blue-400",title:"点击复制",onClick:$e(g=>Ae(rs)(r.name),["stop"])},u(r.name),9,Ap),e("p",Cp,u(r.id),1)])]),e("span",{class:F(["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:F(["mr-1.5 h-1.5 w-1.5 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),K(" "+u(r.isActive?"活跃":"已停用"),1)],2)]),e("div",$p,[r.claudeAccountId||r.claudeConsoleAccountId?(o(),n("div",Ip,[t[104]||(t[104]=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"}),K(" Claude ")],-1)),e("span",Kp,u(ms(r)),1)])):$("",!0),r.geminiAccountId?(o(),n("div",Lp,[t[105]||(t[105]=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"}),K(" Gemini ")],-1)),e("span",Dp,u(xs(r)),1)])):$("",!0),r.openaiAccountId?(o(),n("div",Tp,[t[106]||(t[106]=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"}),K(" OpenAI ")],-1)),e("span",_p,u(ys(r)),1)])):$("",!0),r.bedrockAccountId?(o(),n("div",Sp,[t[107]||(t[107]=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"}),K(" Bedrock ")],-1)),e("span",Mp,u(fs(r)),1)])):$("",!0),r.droidAccountId?(o(),n("div",Up,[t[108]||(t[108]=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"}),K(" Droid ")],-1)),e("span",Rp,u(bs(r)),1)])):$("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(o(),n("div",Vp,t[109]||(t[109]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),K(" 使用共享池 ",-1)]))):$("",!0),Y.value&&r.ownerDisplayName?(o(),n("div",Pp,[t[110]||(t[110]=e("i",{class:"fas fa-user mr-1"},null,-1)),K(" "+u(r.ownerDisplayName),1)])):$("",!0)]),e("div",Ep,[e("div",Op,[e("div",jp,[e("span",Gp,u(v.type==="custom"?"累计统计":"今日使用"),1),e("button",{class:"text-xs text-blue-600 hover:text-blue-800",onClick:g=>Tt(r)},t[111]||(t[111]=[e("i",{class:"fas fa-chart-line mr-1"},null,-1),K("详情 ",-1)]),8,zp)]),e("div",qp,[e("div",null,[Ze(r.id)?(o(),n("div",Fp)):ve(r.id)?(o(),n("p",Bp,u(Ae(vt)(ve(r.id).requests||0))+" 次 ",1)):(o(),n("p",Wp,"-")),t[112]||(t[112]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"请求",-1))]),e("div",null,[Ze(r.id)?(o(),n("div",Np)):ve(r.id)?(o(),n("p",Hp,u(ve(r.id).formattedCost||"$0.00"),1)):(o(),n("p",Yp,"-")),t[113]||(t[113]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"费用",-1))])]),e("div",Qp,[e("div",Jp,[t[114]||(t[114]=e("span",null,"最后使用",-1)),e("span",Xp,u(r.lastUsedAt?Jt(r.lastUsedAt):"从未使用"),1)]),e("div",Zp,[t[116]||(t[116]=e("span",null,"账号",-1)),r.lastUsedAt&&It(r.id)?(o(),n("span",em,t[115]||(t[115]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),K(" 加载中... ",-1)]))):Zt(r)?(o(),n("span",{key:1,class:"truncate text-gray-500 dark:text-gray-400",style:{"max-width":"180px"},title:yt(r)},[K(u(ts(r))+" ",1),ss(r)?$("",!0):(o(),n("span",sm," ("+u(St(r))+") ",1))],8,tm)):(o(),n("span",am,"暂无使用账号"))])])]),e("div",rm,[Ze(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(o(),n("div",om,t[117]||(t[117]=[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)]))):(o(),n(re,{key:1},[r.dailyCostLimit>0?(o(),he(Fe,{key:0,current:((w=ve(r.id))==null?void 0:w.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(o(),he(Fe,{key:1,current:((q=ve(r.id))==null?void 0:q.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)?(o(),n("div",lm,[ne(Fe,{current:((B=ve(r.id))==null?void 0:B.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",nm,[e("div",im,[t[118]||(t[118]=e("i",{class:"fas fa-clock text-xs"},null,-1)),e("span",dm,u(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:F(["font-bold",(((O=ve(r.id))==null?void 0:O.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},u((((me=ve(r.id))==null?void 0:me.windowRemainingSeconds)||0)>0?Ks(((fe=ve(r.id))==null?void 0:fe.windowRemainingSeconds)||0):"未激活"),3)])])):(o(),n("div",um,t[119]||(t[119]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("div",cm,[e("div",gm,[t[120]||(t[120]=e("span",null,"创建时间",-1)),e("span",null,u(Ae(Pe)(r.createdAt)),1)]),e("div",pm,[t[122]||(t[122]=e("span",null,"过期时间",-1)),e("div",mm,[e("span",{class:F(mt(r.expiresAt)?"font-semibold text-orange-600":"")},u(r.expiresAt?Ae(Pe)(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(g=>xt(r),["stop"])},t[121]||(t[121]=[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,xm)])])]),r.tags&&r.tags.length>0?(o(),n("div",ym,[(o(!0),n(re,null,ge(r.tags,g=>(o(),n("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"},u(g),1))),128))])):$("",!0),e("div",fm,[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:g=>Tt(r)},t[123]||(t[123]=[e("i",{class:"fas fa-chart-line"},null,-1),K(" 查看详情 ",-1)]),8,bm),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:g=>Nt(r)},t[124]||(t[124]=[e("i",{class:"fas fa-edit mr-1"},null,-1),K(" 编辑 ",-1)]),8,vm),r.expiresAt&&(pt(r.expiresAt)||mt(r.expiresAt))?(o(),n("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:g=>Ht(r)},t[125]||(t[125]=[e("i",{class:"fas fa-clock mr-1"},null,-1),K(" 续期 ",-1)]),8,km)):$("",!0),e("button",{class:F([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:g=>Yt(r)},[e("i",{class:F(["fas",r.isActive?"fa-ban":"fa-check-circle","mr-1"])},null,2),K(" "+u(r.isActive?"禁用":"激活"),1)],10,wm),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:g=>Qt(r.id)},t[126]||(t[126]=[e("i",{class:"fas fa-trash"},null,-1)]),8,hm)])])}),128))])):$("",!0),Ct.value.length>0?(o(),n("div",Am,[e("div",Cm,[e("span",$m," 共 "+u(Ct.value.length)+" 条记录 ",1),e("div",Im,[t[127]||(t[127]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),_(e("select",{"onUpdate:modelValue":t[19]||(t[19]=r=>ce.value=r),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm"},[(o(),n(re,null,ge(Ve,r=>e("option",{key:r,value:r},u(r),9,Km)),64))],512),[[kt,ce.value]]),t[128]||(t[128]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",Lm,[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:ye.value===1,onClick:t[20]||(t[20]=r=>ye.value--)},t[129]||(t[129]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,Dm),e("div",Tm,[cs.value?(o(),n("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[21]||(t[21]=r=>ye.value=1)}," 1 ")):$("",!0),Ns.value?(o(),n("span",_m,"...")):$("",!0),(o(!0),n(re,null,ge(ct.value,r=>(o(),n("button",{key:r,class:F(["rounded-md px-2 py-1 text-xs font-medium sm:px-3 sm:text-sm",r===ye.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:w=>ye.value=r},u(r),11,Sm))),128)),Hs.value?(o(),n("span",Mm,"...")):$("",!0),gs.value?(o(),n("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[22]||(t[22]=r=>ye.value=Xe.value)},u(Xe.value),1)):$("",!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:ye.value===Xe.value||Xe.value===0,onClick:t[23]||(t[23]=r=>ye.value++)},t[130]||(t[130]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,Um)])])):$("",!0)])):se.value==="deleted"?(o(),n("div",Rm,[ee.value?(o(),n("div",Vm,t[131]||(t[131]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载已删除的 API Keys...",-1)]))):G.value.length===0?(o(),n("div",Pm,t[132]||(t[132]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-trash text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无已删除的 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"已删除的 API Keys 会出现在这里",-1)]))):(o(),n("div",Em,[e("div",Om,[G.value.length>0?(o(),n("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:Aa},[t[133]||(t[133]=e("i",{class:"fas fa-trash-alt mr-2"},null,-1)),K(" 清空所有已删除 ("+u(G.value.length)+") ",1)])):$("",!0)]),e("div",jm,[e("div",Gm,[e("table",zm,[e("thead",qm,[e("tr",null,[t[134]||(t[134]=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[135]||(t[135]=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)),Y.value?(o(),n("th",Fm," 创建者 ")):$("",!0),t[136]||(t[136]=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[137]||(t[137]=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[138]||(t[138]=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[139]||(t[139]=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[140]||(t[140]=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[141]||(t[141]=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[142]||(t[142]=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[143]||(t[143]=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",Bm,[(o(!0),n(re,null,ge(G.value,r=>{var w,q,B,O,me,fe;return o(),n("tr",{key:r.id,class:"table-row"},[e("td",Wm,[e("div",Nm,[t[144]||(t[144]=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",Hm,[e("div",{class:"cursor-pointer truncate text-sm font-semibold text-gray-900 hover:text-blue-600 dark:text-gray-100 dark:hover:text-blue-400",title:"点击复制",onClick:$e(g=>Ae(rs)(r.name),["stop"])},u(r.name),9,Ym)])])]),e("td",Qm,[e("div",Jm,[r.claudeAccountId?(o(),n("div",Xm,t[145]||(t[145]=[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]"}),K(" Claude OAuth ")],-1)]))):r.claudeConsoleAccountId?(o(),n("div",Zm,t[146]||(t[146]=[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]"}),K(" Claude Console ")],-1)]))):r.geminiAccountId?(o(),n("div",ex,t[147]||(t[147]=[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]"}),K(" Gemini ")],-1)]))):(o(),n("div",tx,t[148]||(t[148]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),K(" 共享池 ",-1)])))])]),Y.value?(o(),n("td",sx,[e("div",ax,[r.createdBy==="admin"?(o(),n("span",rx,t[149]||(t[149]=[e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1),K(" 管理员 ",-1)]))):r.userUsername?(o(),n("span",ox,[t[150]||(t[150]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),K(" "+u(r.userUsername),1)])):(o(),n("span",lx,t[151]||(t[151]=[e("i",{class:"fas fa-question-circle mr-1 text-xs"},null,-1),K(" 未知 ",-1)])))])])):$("",!0),e("td",nx,u(Ae(Pe)(r.createdAt)),1),e("td",ix,[e("div",dx,[r.deletedByType==="admin"?(o(),n("span",ux,[t[152]||(t[152]=e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1)),K(" "+u(r.deletedBy),1)])):r.deletedByType==="user"?(o(),n("span",cx,[t[153]||(t[153]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),K(" "+u(r.deletedBy),1)])):(o(),n("span",gx,[t[154]||(t[154]=e("i",{class:"fas fa-cog mr-1 text-xs"},null,-1)),K(" "+u(r.deletedBy),1)]))])]),e("td",px,u(Ae(Pe)(r.deletedAt)),1),e("td",mx,[e("span",xx," $"+u((((q=(w=r.usage)==null?void 0:w.total)==null?void 0:q.cost)||0).toFixed(2)),1)]),e("td",yx,[e("span",fx,u(Me(((O=(B=r.usage)==null?void 0:B.total)==null?void 0:O.tokens)||0)),1)]),e("td",bx,[e("div",vx,[e("span",kx,u(Ae(vt)(((fe=(me=r.usage)==null?void 0:me.total)==null?void 0:fe.requests)||0)),1),t[155]||(t[155]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",wx,[e("div",hx,[r.lastUsedAt?(o(),n("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},u(Jt(r.lastUsedAt)),9,Ax)):(o(),n("span",Cx,"从未使用")),r.lastUsedAt&&It(r.id)?(o(),n("span",$x,t[156]||(t[156]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),K(" 加载中... ",-1)]))):Zt(r)?(o(),n("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:yt(r)},[K(u(ts(r))+" ",1),ss(r)?$("",!0):(o(),n("span",Kx," ("+u(St(r))+") ",1))],8,Ix)):(o(),n("span",Lx," 暂无使用账号 "))])]),e("td",Dx,[e("div",Tx,[r.canRestore?(o(),n("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:g=>wa(r.id)},t[157]||(t[157]=[e("i",{class:"fas fa-undo mr-1"},null,-1),K(" 恢复 ",-1)]),8,_x)):$("",!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:g=>ha(r.id)},t[158]||(t[158]=[e("i",{class:"fas fa-times mr-1"},null,-1),K(" 彻底删除 ",-1)]),8,Sx)])])])}),128))])])])])]))])):$("",!0)])]),ze.value?(o(),he(hl,{key:0,accounts:b.value,onBatchSuccess:xa,onClose:t[24]||(t[24]=r=>ze.value=!1),onSuccess:ma},null,8,["accounts"])):$("",!0),We.value?(o(),he(Tn,{key:1,accounts:b.value,"api-key":ns.value,onClose:t[25]||(t[25]=r=>We.value=!1),onSuccess:ba},null,8,["accounts","api-key"])):$("",!0),Ne.value?(o(),he(Wn,{key:2,"api-key":is.value,onClose:t[26]||(t[26]=r=>Ne.value=!1),onSuccess:va},null,8,["api-key"])):$("",!0),pe.value?(o(),he(li,{key:3,"api-key":ds.value,onClose:t[27]||(t[27]=r=>pe.value=!1)},null,8,["api-key"])):$("",!0),Ee.value?(o(),he(_i,{key:4,"api-keys":us.value,onClose:t[28]||(t[28]=r=>Ee.value=!1)},null,8,["api-keys"])):$("",!0),ht.value?(o(),he(Cd,{key:5,accounts:b.value,"selected-keys":I.value,onClose:t[29]||(t[29]=r=>ht.value=!1),onSuccess:fa},null,8,["accounts","selected-keys"])):$("",!0),ne(Qd,{ref_key:"expiryEditModalRef",ref:Ce,"api-key":Te.value||{id:null,expiresAt:null,name:""},show:!!Te.value,onClose:Is,onSave:Ia},null,8,["api-key","show"]),ne(J0,{"api-key":i.value||{},show:N.value,onClose:t[30]||(t[30]=r=>N.value=!1),onOpenTimeline:Ka},null,8,["api-key","show"]),ne(bu,{show:Wt.value,onClose:t[31]||(t[31]=r=>Wt.value=!1),onUpdated:Ke},null,8,["show"]),ne(at,{"cancel-text":rt.value.cancelText,"confirm-text":rt.value.confirmText,message:rt.value.message,show:At.value,title:rt.value.title,type:rt.value.type,onCancel:Ws,onConfirm:Bs},null,8,["cancel-text","confirm-text","message","show","title","type"])])}}},Gx=st(Mx,[["__scopeId","data-v-4ed7ad31"]]);export{Gx as default};
|