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