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