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