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