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