import{aP as gt,r as D,c as N,aX as G,x as n,y as o,z as t,O as k,L,P as l,u as e,C as P,K as ct,aq as ut,aa as mt,f as ft,Y as yt,Q as z,ac as H,B as tt,R as J,q as pt,aW as vt,V as bt,o as _t,I as rt,J as xt,av as kt}from"./vue-vendor-Bsazo-x0.js";import{_ as Q,a as ht}from"./index-BMheApHH.js";import{L as wt}from"./LogoTitle-D9Af_Dhr.js";import{T as $t}from"./ThemeToggle-BdMr1sf1.js";import{b as St}from"./vendor-Dr8jvgFu.js";import{_ as Ct}from"./WindowCountdown-BTXjZ8Dc.js";import Tt from"./TutorialView-Cf_tjybn.js";import"./element-plus-CqiD73Lu.js";class Kt{constructor(){this.baseURL=window.location.origin,this.isDev=!1}async request(p,s={}){try{this.isDev&&p.startsWith("/admin")&&(p="/webapi"+p);const g=await fetch(`${this.baseURL}${p}`,{headers:{"Content-Type":"application/json",...s.headers},...s}),f=await g.json();if(!g.ok)throw new Error(f.message||`请求失败: ${g.status}`);return f}catch(g){throw console.error("API Stats request error:",g),g}}async getKeyId(p){return this.request("/apiStats/api/get-key-id",{method:"POST",body:JSON.stringify({apiKey:p})})}async getUserStats(p){return this.request("/apiStats/api/user-stats",{method:"POST",body:JSON.stringify({apiId:p})})}async getUserModelStats(p,s="daily"){return this.request("/apiStats/api/user-model-stats",{method:"POST",body:JSON.stringify({apiId:p,period:s})})}async getOemSettings(){try{return await this.request("/admin/oem-settings")}catch(p){return console.error("Failed to load OEM settings:",p),{success:!0,data:{siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}}}async getBatchStats(p){return this.request("/apiStats/api/batch-stats",{method:"POST",body:JSON.stringify({apiIds:p})})}async getBatchModelStats(p,s="daily"){return this.request("/apiStats/api/batch-model-stats",{method:"POST",body:JSON.stringify({apiIds:p,period:s})})}}const V=new Kt,X=gt("apistats",()=>{const O=D(""),p=D(null),s=D(!1),g=D(!1),f=D(!0),y=D(""),m=D("daily"),v=D(null),w=D([]),M=D(null),x=D(null),C=D({siteName:"",siteIcon:"",siteIconData:""}),R=D(!1),h=D([]),_=D([]),c=D(null),r=D([]),K=D([]),j=N(()=>{const d={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};return R.value&&c.value?m.value==="daily"?c.value.dailyUsage||d:c.value.monthlyUsage||d:m.value==="daily"?M.value||d:x.value||d}),Y=N(()=>{if(!v.value||!j.value)return{tokenUsage:0,costUsage:0,requestUsage:0};const d=j.value,b=v.value.limits;return{tokenUsage:b.tokenLimit>0?Math.min(d.allTokens/b.tokenLimit*100,100):0,costUsage:b.dailyCostLimit>0?Math.min(d.cost/b.dailyCostLimit*100,100):0,requestUsage:b.rateLimitRequests>0?Math.min(d.requests/b.rateLimitRequests*100,100):0}});async function W(){if(R.value)return at();const d=O.value.trim();if(!d){y.value="请输入 API Key";return}if(d.length<10||d.length>512){y.value="API Key 格式无效:长度应在 10-512 个字符之间";return}s.value=!0,y.value="",v.value=null,w.value=[],p.value=null;try{const b=await V.getKeyId(d);if(b.success){p.value=b.data.id;const T=await V.getUserStats(p.value);if(T.success)v.value=T.data,await F(),y.value="",ot();else throw new Error(T.message||"查询失败")}else throw new Error(b.message||"获取 API Key ID 失败")}catch(b){console.error("Query stats error:",b),y.value=b.message||"查询统计数据失败,请检查您的 API Key 是否正确",v.value=null,w.value=[],p.value=null}finally{s.value=!1}}async function F(){p.value&&(await Promise.all([q("daily"),q("monthly")]),await $(m.value))}async function q(d){try{const b=await V.getUserModelStats(p.value,d);if(b.success){const T=b.data||[],U={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};T.forEach(A=>{var E;U.requests+=A.requests||0,U.inputTokens+=A.inputTokens||0,U.outputTokens+=A.outputTokens||0,U.cacheCreateTokens+=A.cacheCreateTokens||0,U.cacheReadTokens+=A.cacheReadTokens||0,U.allTokens+=A.allTokens||0,U.cost+=((E=A.costs)==null?void 0:E.total)||0}),U.formattedCost=lt(U.cost),d==="daily"?M.value=U:x.value=U}else console.warn(`Failed to load ${d} stats:`,b.message)}catch(b){console.error(`Load ${d} stats error:`,b)}}async function $(d="daily"){if(p.value){g.value=!0;try{const b=await V.getUserModelStats(p.value,d);if(b.success)w.value=b.data||[];else throw new Error(b.message||"加载模型统计失败")}catch(b){console.error("Load model stats error:",b),w.value=[]}finally{g.value=!1}}}async function Z(d){if(!(m.value===d||g.value)){if(m.value=d,R.value&&_.value.length>0){await et(d);return}(d==="daily"&&!M.value||d==="monthly"&&!x.value)&&await q(d),await $(d)}}async function B(){var d,b;if(p.value){s.value=!0,y.value="",v.value=null,w.value=[];try{const T=await V.getUserStats(p.value);if(T.success)v.value=T.data,console.log("API Stats - Full response:",T.data),console.log("API Stats - limits data:",T.data.limits),console.log("API Stats - weeklyOpusCostLimit:",(d=T.data.limits)==null?void 0:d.weeklyOpusCostLimit),console.log("API Stats - weeklyOpusCost:",(b=T.data.limits)==null?void 0:b.weeklyOpusCost),await F(),y.value="";else throw new Error(T.message||"查询失败")}catch(T){console.error("Load stats with apiId error:",T),y.value=T.message||"查询统计数据失败",v.value=null,w.value=[]}finally{s.value=!1}}}async function it(){f.value=!0;try{const d=await V.getOemSettings();d&&d.success&&d.data&&(C.value={...C.value,...d.data})}catch(d){console.error("Error loading OEM settings:",d),C.value={siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}finally{f.value=!1}}function lt(d){return typeof d!="number"||d===0?"$0.000000":d>=1?"$"+d.toFixed(2):d>=.01?"$"+d.toFixed(4):"$"+d.toFixed(6)}function ot(){if(p.value){const d=new URL(window.location);d.searchParams.set("apiId",p.value),window.history.pushState({},"",d)}}async function at(){const d=i();if(d.length===0){y.value="请输入至少一个有效的 API Key";return}s.value=!0,y.value="",c.value=null,r.value=[],K.value=[],w.value=[],h.value=d,_.value=[];try{const b=await Promise.allSettled(d.map(E=>V.getKeyId(E))),T=[],U=[];if(b.forEach((E,st)=>{E.status==="fulfilled"&&E.value.success?(T.push(E.value.data.id),U.push(d[st])):K.value.push(d[st])}),T.length===0)throw new Error("所有 API Key 都无效");_.value=T,h.value=U;const A=await V.getBatchStats(T);if(A.success)c.value=A.data.aggregated,r.value=A.data.individual,v.value=A.data.aggregated,M.value=A.data.aggregated.dailyUsage||null,x.value=A.data.aggregated.monthlyUsage||null,await et(m.value),a();else throw new Error(A.message||"批量查询失败")}catch(b){console.error("Batch query error:",b),y.value=b.message||"批量查询统计数据失败",c.value=null,r.value=[]}finally{s.value=!1}}async function et(d="daily"){if(_.value.length!==0){g.value=!0;try{const b=await V.getBatchModelStats(_.value,d);if(b.success)w.value=b.data||[];else throw new Error(b.message||"加载批量模型统计失败")}catch(b){console.error("Load batch model stats error:",b),w.value=[]}finally{g.value=!1}}}function i(){if(!O.value)return[];const d=O.value.split(/[,\n]+/).map(T=>T.trim()).filter(T=>T.length>=10&&T.length<=512);return[...new Set(d)].slice(0,30)}function a(){if(_.value.length>0){const d=new URL(window.location);d.searchParams.set("apiIds",_.value.join(",")),d.searchParams.set("batch","true"),window.history.pushState({},"",d)}}function u(){O.value=""}function S(){v.value=null,w.value=[],M.value=null,x.value=null,y.value="",m.value="daily",p.value=null,h.value=[],_.value=[],c.value=null,r.value=[],K.value=[]}function I(){O.value="",R.value=!1,S()}return{apiKey:O,apiId:p,loading:s,modelStatsLoading:g,oemLoading:f,error:y,statsPeriod:m,statsData:v,modelStats:w,dailyStats:M,monthlyStats:x,oemSettings:C,multiKeyMode:R,apiKeys:h,apiIds:_,aggregatedStats:c,individualStats:r,invalidKeys:K,currentPeriodData:j,usagePercentages:Y,queryStats:W,queryBatchStats:at,loadAllPeriodStats:F,loadPeriodStats:q,loadModelStats:$,loadBatchModelStats:et,switchPeriod:Z,loadStatsWithApiId:B,loadOemSettings:it,clearData:S,clearInput:u,reset:I}}),Lt={class:"api-input-wide-card mb-8 rounded-3xl p-6 shadow-xl"},At={class:"mx-auto max-w-4xl"},Pt={class:"control-bar mb-4 flex flex-wrap items-center justify-between gap-3"},Mt={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},It={class:"button-group flex items-center gap-2"},qt={class:"mode-switch-group flex items-center rounded-lg bg-gray-100 p-1 dark:bg-gray-800"},Dt={key:0,class:"ml-1 rounded-full bg-white/20 px-1.5 py-0.5 text-xs font-semibold"},Ut={class:"api-input-grid grid grid-cols-1 gap-4 lg:grid-cols-4"},Rt={class:"lg:col-span-3"},jt=["disabled"],Ot={key:1,class:"relative"},Nt=["disabled"],Et={class:"lg:col-span-1"},Ft=["disabled"],Wt={key:0,class:"fas fa-spinner loading-spinner"},Bt={key:1,class:"fas fa-search"},Vt={class:"security-notice mt-4"},zt={key:0,class:"mt-2 rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-400"},Jt={__name:"ApiKeyInput",setup(O){const p=X(),{apiKey:s,loading:g,multiKeyMode:f}=G(p),{queryStats:y,clearInput:m}=p,v=N(()=>{if(!f.value||!s.value)return[];const M=s.value.split(/[,\n]+/).map(C=>C.trim()).filter(C=>C.length>0);return[...new Set(M)].slice(0,30)}),w=N(()=>f.value?v.value.length>0:s.value&&s.value.trim().length>0);return(M,x)=>(o(),n("div",Lt,[x[15]||(x[15]=t("div",{class:"wide-card-title mb-6"},[t("h2",{class:"mb-2 text-2xl font-bold text-gray-900 dark:text-gray-200"},[t("i",{class:"fas fa-chart-line mr-3"}),k(" 使用统计查询 ")]),t("p",{class:"text-base text-gray-600 dark:text-gray-400"},"查询您的 API Key 使用情况和统计数据")],-1)),t("div",At,[t("div",Pt,[t("label",Mt,[x[8]||(x[8]=t("i",{class:"fas fa-key mr-2"},null,-1)),k(" "+l(e(f)?"输入您的 API Keys(每行一个或用逗号分隔)":"输入您的 API Key"),1)]),t("div",It,[t("div",qt,[t("button",{class:P(["mode-switch-btn",{active:!e(f)}]),title:"单一模式",onClick:x[0]||(x[0]=C=>f.value=!1)},x[9]||(x[9]=[t("i",{class:"fas fa-key"},null,-1),t("span",{class:"ml-2 hidden sm:inline"},"单一",-1)]),2),t("button",{class:P(["mode-switch-btn",{active:e(f)}]),title:"聚合模式",onClick:x[1]||(x[1]=C=>f.value=!0)},[x[10]||(x[10]=t("i",{class:"fas fa-layer-group"},null,-1)),x[11]||(x[11]=t("span",{class:"ml-2 hidden sm:inline"},"聚合",-1)),e(f)&&v.value.length>0?(o(),n("span",Dt,l(v.value.length),1)):L("",!0)],2)])])]),t("div",Ut,[t("div",Rt,[e(f)?(o(),n("div",Ot,[ct(t("textarea",{"onUpdate:modelValue":x[4]||(x[4]=C=>ft(s)?s.value=C:null),class:"wide-card-input w-full resize-y",disabled:e(g),placeholder:`请输入您的 API Keys,支持以下格式: cr_xxx cr_yyy 或 cr_xxx, cr_yyy`,rows:"4",onKeyup:x[5]||(x[5]=mt(yt((...C)=>e(y)&&e(y)(...C),["ctrl"]),["enter"]))},null,40,Nt),[[ut,e(s)]]),e(s)&&!e(g)?(o(),n("button",{key:0,class:"absolute right-2 top-2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"清空输入",onClick:x[6]||(x[6]=(...C)=>e(m)&&e(m)(...C))},x[12]||(x[12]=[t("i",{class:"fas fa-times-circle"},null,-1)]))):L("",!0)])):ct((o(),n("input",{key:0,"onUpdate:modelValue":x[2]||(x[2]=C=>ft(s)?s.value=C:null),class:"wide-card-input w-full",disabled:e(g),placeholder:"请输入您的 API Key (cr_...)",type:"password",onKeyup:x[3]||(x[3]=mt((...C)=>e(y)&&e(y)(...C),["enter"]))},null,40,jt)),[[ut,e(s)]])]),t("div",Et,[t("button",{class:"btn btn-primary btn-query flex h-full w-full items-center justify-center gap-2",disabled:e(g)||!w.value,onClick:x[7]||(x[7]=(...C)=>e(y)&&e(y)(...C))},[e(g)?(o(),n("i",Wt)):(o(),n("i",Bt)),k(" "+l(e(g)?"查询中...":"查询统计"),1)],8,Ft)])]),t("div",Vt,[x[13]||(x[13]=t("i",{class:"fas fa-shield-alt mr-2"},null,-1)),k(" "+l(e(f)?"您的 API Keys 仅用于查询统计数据,不会被存储。聚合模式下部分个体化信息将不显示。":"您的 API Key 仅用于查询自己的统计数据,不会被存储或用于其他用途"),1)]),e(f)?(o(),n("div",zt,x[14]||(x[14]=[t("i",{class:"fas fa-lightbulb mr-2"},null,-1),t("span",null,"提示:最多支持同时查询 30 个 API Keys。使用 Ctrl+Enter 快速查询。",-1)]))):L("",!0)])]))}},Yt=Q(Jt,[["__scopeId","data-v-11e74200"]]),Ht={class:"space-y-6 md:space-y-8"},Gt={class:"grid grid-cols-1 items-stretch gap-4 md:gap-6 xl:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)]"},Qt={class:"card-section"},Xt={class:"section-header"},Zt={class:"header-title"},te={key:0,class:"info-grid"},ee={class:"info-item"},se={class:"info-value"},ae={class:"info-item"},re={class:"info-value text-green-600 dark:text-emerald-400"},ie={key:0,class:"info-item"},le={class:"info-value text-red-500 dark:text-red-400"},oe={class:"info-item"},ne={class:"info-value"},de={class:"info-item"},ce={class:"info-value"},ue={class:"info-item"},me={class:"info-value text-indigo-600 dark:text-indigo-300"},fe={key:1,class:"info-item xl:col-span-2"},xe={class:"space-y-2"},ge={class:"truncate"},ye={class:"font-semibold"},pe={key:1,class:"info-grid"},ve={class:"info-item"},be={class:"info-value break-all"},_e={class:"info-item"},ke={class:"info-item"},he={class:"info-value"},we={class:"info-item"},$e={class:"info-value break-all"},Se={class:"info-item xl:col-span-2"},Ce={class:"info-value"},Te={class:"ml-2 text-xs text-gray-500 dark:text-gray-400"},Ke={key:0,class:"text-red-500 dark:text-red-400"},Le={key:1,class:"text-orange-500 dark:text-orange-400"},Ae={key:2},Pe={key:2,class:"text-gray-400 dark:text-gray-500"},Me={class:"card-section"},Ie={class:"section-header"},qe={class:"header-tag"},De={class:"metric-grid"},Ue={class:"metric-card"},Re={class:"metric-value text-green-600 dark:text-emerald-300"},je={class:"metric-label"},Oe={class:"metric-card"},Ne={class:"metric-value text-blue-600 dark:text-sky-300"},Ee={class:"metric-label"},Fe={class:"metric-card"},We={class:"metric-value text-purple-600 dark:text-violet-300"},Be={class:"metric-label"},Ve={class:"metric-card"},ze={class:"metric-value text-amber-500 dark:text-amber-300"},Je={class:"metric-label"},Ye={key:0,class:"card-section"},He={class:"flex items-center justify-between gap-3"},Ge={class:"flex items-center gap-3"},Qe={class:"account-name"},Xe={class:"account-sub"},Ze={key:0,class:"mt-3 space-y-2"},ts={class:"progress-row"},es={class:"progress-track"},ss={class:"progress-value"},as={class:"flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-300"},rs={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},is={key:1,class:"mt-3"},ls={key:0,class:"space-y-2"},os={class:"quota-header"},ns={class:"quota-percent"},ds={class:"progress-track"},cs={class:"quota-foot"},us={key:1,class:"rounded-xl bg-slate-100 px-3 py-2 text-xs text-slate-500 dark:bg-slate-800 dark:text-slate-300"},ms={__name:"StatsOverview",setup(O){const p=X(),{statsData:s,statsPeriod:g,currentPeriodData:f,multiKeyMode:y,aggregatedStats:m,individualStats:v,invalidKeys:w}=G(p),M=N(()=>!v.value||v.value.length===0?[]:[...v.value].sort((i,a)=>{var u,S;return(((u=a.usage)==null?void 0:u.allTokens)||0)-(((S=i.usage)==null?void 0:S.allTokens)||0)}).slice(0,3)),x=i=>{var u;return!m.value||!m.value.usage.allTokens?0:((((u=i.usage)==null?void 0:u.allTokens)||0)/m.value.usage.allTokens*100).toFixed(1)},C=i=>{if(!i)return"无";try{return St(i).format("YYYY年MM月DD日 HH:mm")}catch{return"格式错误"}},R=i=>i?new Date(i).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",h=i=>i?new Date(i){if(!i)return!1;const S=(new Date(i)-new Date)/(1e3*60*60*24);return S>0&&S<=7},c=i=>(typeof i!="number"&&(i=parseInt(i)||0),i===0?"0":i>=1e6?(i/1e6).toFixed(1)+"M":i>=1e3?(i/1e3).toFixed(1)+"K":i.toLocaleString()),r=i=>({claude:"Claude",gemini:"Gemini",all:"全部模型"})[i]||i||"未知",K=N(()=>{var u,S;const i=(S=(u=s.value)==null?void 0:u.accounts)==null?void 0:S.details;if(!i)return[];const a=[];return i.claude&&i.claude.accountType==="dedicated"&&a.push({key:"claude",...i.claude}),i.openai&&i.openai.accountType==="dedicated"&&a.push({key:"openai",...i.openai}),a}),j=N(()=>{const i=K.value.length;return i<=1?"md:grid-cols-1 lg:grid-cols-1":i===2?"md:grid-cols-2":"md:grid-cols-2 xl:grid-cols-3"}),Y=i=>i?i.platform==="openai"?"OpenAI 专属账号":"Claude 专属账号":"专属账号",W=i=>{if(!i||i<=0)return"";const a=Math.floor(i),u=Math.floor(a/1440),S=Math.floor(a%1440/60),I=a%60;return u>0?S>0?`${u}天${S}小时`:`${u}天`:S>0?I>0?`${S}小时${I}分钟`:`${S}小时`:`${I}分钟`},F=i=>{if(!i)return{text:"状态未知",class:"text-gray-400"};if(i.isRateLimited){const a=W(i.minutesRemaining);return{text:`限流中${a?` · 剩余约 ${a}`:""}`,class:"text-red-500 dark:text-red-400"}}return{text:"未限流",class:"text-green-600 dark:text-emerald-400"}},q=(i,a)=>{if(!i||!a)return"暂无时间窗口信息";const u=new Date(i),S=new Date(a),I=d=>`${`${d.getHours()}`.padStart(2,"0")}:${`${d.getMinutes()}`.padStart(2,"0")}`;return`${I(u)} - ${I(S)}`},$=i=>{if(!i||i<=0)return"";const a=Math.floor(i/60),u=i%60;return a>0?`${a}小时${u}分钟`:`${u}分钟`},Z=(i,a)=>{var S;if(!i)return"bg-gradient-to-r from-blue-500 to-indigo-500";if((S=a==null?void 0:a.rateLimitStatus)!=null&&S.isRateLimited)return"bg-gradient-to-r from-red-500 to-red-600";const u=String(i).toLowerCase();return u==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":u==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-500"},B=i=>{if(!i)return null;const a=typeof i.usedPercent=="number"&&!Number.isNaN(i.usedPercent)?i.usedPercent:null,u=typeof i.resetAfterSeconds=="number"&&!Number.isNaN(i.resetAfterSeconds)?i.resetAfterSeconds:null,S=typeof i.remainingSeconds=="number"?i.remainingSeconds:null,I=i.resetAt?Date.parse(i.resetAt):null;return u!==null&&(S!==null&&S<=0||I!==null&&!Number.isNaN(I)&&Date.now()>=I)?0:a===null?null:Math.max(0,Math.min(100,a))},it=i=>{const a=B(i);return a===null?"bg-gradient-to-r from-gray-300 to-gray-400":a>=90?"bg-gradient-to-r from-red-500 to-red-600":a>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},lt=i=>{const a=B(i);return a===null?"0%":`${a}%`},ot=i=>{const a=B(i);return a===null?"--":`${a.toFixed(1)}%`},at=i=>{if(!i)return"--";let a=i.remainingSeconds;if(a==null&&(a=i.resetAfterSeconds),a==null||Number.isNaN(Number(a)))return"--";a=Math.max(0,Math.floor(Number(a)));const u=Math.floor(a/86400),S=Math.floor(a%86400/3600),I=Math.floor(a%3600/60),d=a%60;return u>0?S>0?`${u}天${S}小时`:`${u}天`:S>0?I>0?`${S}小时${I}分钟`:`${S}小时`:I>0?`${I}分钟`:`${d}秒`},et=i=>i==="secondary"?"周限":"5h";return(i,a)=>(o(),n("div",Ht,[t("div",Gt,[t("div",Qt,[t("header",Xt,[t("i",{class:P(["header-icon",e(y)?"fas fa-layer-group text-purple-500":"fas fa-info-circle text-blue-500"])},null,2),t("h3",Zt,l(e(y)?"批量查询概要":"API Key 信息"),1)]),e(y)&&e(m)?(o(),n("div",te,[t("div",ee,[a[0]||(a[0]=t("p",{class:"info-label"},"查询 Keys 数",-1)),t("p",se,l(e(m).totalKeys)+" 个",1)]),t("div",ae,[a[2]||(a[2]=t("p",{class:"info-label"},"有效 Keys 数",-1)),t("p",re,[a[1]||(a[1]=t("i",{class:"fas fa-check-circle mr-1"},null,-1)),k(l(e(m).activeKeys)+" 个 ",1)])]),e(w).length>0?(o(),n("div",ie,[a[4]||(a[4]=t("p",{class:"info-label"},"无效 Keys 数",-1)),t("p",le,[a[3]||(a[3]=t("i",{class:"fas fa-times-circle mr-1"},null,-1)),k(l(e(w).length)+" 个 ",1)])])):L("",!0),t("div",oe,[a[5]||(a[5]=t("p",{class:"info-label"},"总请求数",-1)),t("p",ne,l(c(e(m).usage.requests)),1)]),t("div",de,[a[6]||(a[6]=t("p",{class:"info-label"},"总 Token 数",-1)),t("p",ce,l(c(e(m).usage.allTokens)),1)]),t("div",ue,[a[7]||(a[7]=t("p",{class:"info-label"},"总费用",-1)),t("p",me,l(e(m).usage.formattedCost),1)]),e(v).length>1?(o(),n("div",fe,[a[8]||(a[8]=t("p",{class:"info-label"},"Top 3 贡献占比",-1)),t("div",xe,[(o(!0),n(z,null,H(M.value,u=>(o(),n("div",{key:u.apiId,class:"contributor-item"},[t("span",ge,l(u.name),1),t("span",ye,l(x(u))+"%",1)]))),128))])])):L("",!0)])):(o(),n("div",pe,[t("div",ve,[a[9]||(a[9]=t("p",{class:"info-label"},"名称",-1)),t("p",be,l(e(s).name),1)]),t("div",_e,[a[10]||(a[10]=t("p",{class:"info-label"},"状态",-1)),t("p",{class:P(["info-value font-semibold",e(s).isActive?"text-green-600 dark:text-emerald-400":"text-red-500 dark:text-red-400"])},[t("i",{class:P(["mr-1",e(s).isActive?"fas fa-check-circle":"fas fa-times-circle"])},null,2),k(" "+l(e(s).isActive?"活跃":"已停用"),1)],2)]),t("div",ke,[a[11]||(a[11]=t("p",{class:"info-label"},"权限",-1)),t("p",he,l(r(e(s).permissions)),1)]),t("div",we,[a[12]||(a[12]=t("p",{class:"info-label"},"创建时间",-1)),t("p",$e,l(C(e(s).createdAt)),1)]),t("div",Se,[a[17]||(a[17]=t("p",{class:"info-label"},"过期时间",-1)),t("div",Ce,[e(s).expirationMode==="activation"&&!e(s).isActivated?(o(),n(z,{key:0},[a[13]||(a[13]=t("span",{class:"text-amber-600 dark:text-amber-400"},[t("i",{class:"fas fa-pause-circle mr-1"}),k("未激活 ")],-1)),t("span",Te," 首次使用后 "+l(e(s).activationDays||(e(s).activationUnit==="hours"?24:30))+" "+l(e(s).activationUnit==="hours"?"小时":"天")+"过期 ",1)],64)):e(s).expiresAt?(o(),n(z,{key:1},[h(e(s).expiresAt)?(o(),n("span",Ke,a[14]||(a[14]=[t("i",{class:"fas fa-exclamation-circle mr-1"},null,-1),k("已过期 ",-1)]))):_(e(s).expiresAt)?(o(),n("span",Le,[a[15]||(a[15]=t("i",{class:"fas fa-clock mr-1"},null,-1)),k(l(R(e(s).expiresAt)),1)])):(o(),n("span",Ae,l(R(e(s).expiresAt)),1))],64)):(o(),n("span",Pe,a[16]||(a[16]=[t("i",{class:"fas fa-infinity mr-1"},null,-1),k("永不过期 ",-1)])))])])]))]),t("div",Me,[t("header",Ie,[a[18]||(a[18]=t("i",{class:"header-icon fas fa-chart-bar text-green-500"},null,-1)),a[19]||(a[19]=t("h3",{class:"header-title"},"使用统计概览",-1)),t("span",qe,l(e(g)==="daily"?"今日":"本月"),1)]),t("div",De,[t("div",Ue,[t("p",Re,l(c(e(f).requests)),1),t("p",je,l(e(g)==="daily"?"今日":"本月")+"请求数",1)]),t("div",Oe,[t("p",Ne,l(c(e(f).allTokens)),1),t("p",Ee,l(e(g)==="daily"?"今日":"本月")+"Token 数",1)]),t("div",Fe,[t("p",We,l(e(f).formattedCost||"$0.000000"),1),t("p",Be,l(e(g)==="daily"?"今日":"本月")+"费用",1)]),t("div",Ve,[t("p",ze,l(c(e(f).inputTokens)),1),t("p",Je,l(e(g)==="daily"?"今日":"本月")+"输入 Token",1)])])])]),!e(y)&&K.value.length>0?(o(),n("div",Ye,[a[21]||(a[21]=t("header",{class:"section-header"},[t("i",{class:"header-icon fas fa-plug text-indigo-500"}),t("h3",{class:"header-title"},"专属账号运行状态"),t("span",{class:"header-tag"},"实时更新")],-1)),t("div",{class:P(["grid grid-cols-1 gap-4",j.value])},[(o(!0),n(z,null,H(K.value,u=>{var S,I,d,b,T,U;return o(),n("div",{key:u.id||u.key,class:"account-card"},[t("div",He,[t("div",Ge,[t("span",{class:P(["account-icon",u.platform==="claude"?"icon-claude":"icon-openai"])},[t("i",{class:P(u.platform==="claude"?"fas fa-meteor":"fas fa-robot")},null,2)],2),t("div",null,[t("p",Qe,l(Y(u)),1),t("p",Xe,l(u.platform==="claude"?"会话窗口":"额度窗口"),1)])]),F(u.rateLimitStatus)?(o(),n("div",{key:0,class:P(["rate-badge",F(u.rateLimitStatus).class])},[a[20]||(a[20]=t("i",{class:"fas fa-tachometer-alt mr-1"},null,-1)),k(" "+l(F(u.rateLimitStatus).text),1)],2)):L("",!0)]),u.platform==="claude"?(o(),n("div",Ze,[t("div",ts,[t("div",es,[t("div",{class:P(["progress-bar",Z((S=u.sessionWindow)==null?void 0:S.sessionWindowStatus,u)]),style:tt({width:`${Math.min(100,Math.max(0,((I=u.sessionWindow)==null?void 0:I.progress)||0))}%`})},null,6)]),t("span",ss,l(Math.min(100,Math.max(0,Math.round(((d=u.sessionWindow)==null?void 0:d.progress)||0))))+"% ",1)]),t("div",as,[t("span",null,l(q((b=u.sessionWindow)==null?void 0:b.windowStart,(T=u.sessionWindow)==null?void 0:T.windowEnd)),1),((U=u.sessionWindow)==null?void 0:U.remainingTime)>0?(o(),n("span",rs," 剩余 "+l($(u.sessionWindow.remainingTime)),1)):L("",!0)])])):u.platform==="openai"?(o(),n("div",is,[u.codexUsage?(o(),n("div",ls,[(o(),n(z,null,H(["primary","secondary"],A=>{var E,st,nt,dt;return t("div",{key:`${u.key}-${A}`,class:"quota-row"},[t("div",os,[t("span",{class:P(["quota-tag",A==="primary"?"tag-indigo":"tag-blue"])},l(et(A)),3),t("span",ns,l(ot((E=u.codexUsage)==null?void 0:E[A])),1)]),t("div",ds,[t("div",{class:P(["progress-bar",it((st=u.codexUsage)==null?void 0:st[A])]),style:tt({width:lt((nt=u.codexUsage)==null?void 0:nt[A])})},null,6)]),t("div",cs," 重置剩余 "+l(at((dt=u.codexUsage)==null?void 0:dt[A])),1)])}),64))])):(o(),n("p",us," 暂无额度使用数据 "))])):L("",!0)])}),128))],2)])):L("",!0)]))}},fs=Q(ms,[["__scopeId","data-v-b72df2cd"]]),xs={class:"card p-4 md:p-6"},gs={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},ys={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},ps={class:"space-y-2 md:space-y-3"},vs={class:"flex items-center justify-between"},bs={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},_s={class:"flex items-center justify-between"},ks={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},hs={class:"flex items-center justify-between"},ws={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},$s={class:"flex items-center justify-between"},Ss={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Cs={class:"mt-3 border-t border-gray-200 pt-3 dark:border-gray-700 md:mt-4 md:pt-4"},Ts={class:"flex items-center justify-between font-bold text-gray-900 dark:text-gray-100"},Ks={class:"text-sm md:text-base"},Ls={class:"text-lg md:text-xl"},As={__name:"TokenDistribution",setup(O){const p=X(),{statsPeriod:s,currentPeriodData:g}=G(p),f=y=>(typeof y!="number"&&(y=parseInt(y)||0),y===0?"0":y>=1e6?(y/1e6).toFixed(1)+"M":y>=1e3?(y/1e3).toFixed(1)+"K":y.toLocaleString());return(y,m)=>(o(),n("div",xs,[t("h3",gs,[m[0]||(m[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-coins mr-2 text-sm text-yellow-500 md:mr-3 md:text-base"}),k(" Token 使用分布 ")],-1)),t("span",ys,"("+l(e(s)==="daily"?"今日":"本月")+")",1)]),t("div",ps,[t("div",vs,[m[1]||(m[1]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-right mr-1 text-xs text-green-500 md:mr-2 md:text-sm"}),k(" 输入 Token ")],-1)),t("span",bs,l(f(e(g).inputTokens)),1)]),t("div",_s,[m[2]||(m[2]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-left mr-1 text-xs text-blue-500 md:mr-2 md:text-sm"}),k(" 输出 Token ")],-1)),t("span",ks,l(f(e(g).outputTokens)),1)]),t("div",hs,[m[3]||(m[3]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-save mr-1 text-xs text-purple-500 md:mr-2 md:text-sm"}),k(" 缓存创建 Token ")],-1)),t("span",ws,l(f(e(g).cacheCreateTokens)),1)]),t("div",$s,[m[4]||(m[4]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-download mr-1 text-xs text-orange-500 md:mr-2 md:text-sm"}),k(" 缓存读取 Token ")],-1)),t("span",Ss,l(f(e(g).cacheReadTokens)),1)])]),t("div",Cs,[t("div",Ts,[t("span",Ks,l(e(s)==="daily"?"今日":"本月")+"总计",1),t("span",Ls,l(f(e(g).allTokens)),1)])])]))}},Ps=Q(As,[["__scopeId","data-v-d9e5c1dd"]]),Ms={class:"flex h-full flex-col gap-4 md:gap-6"},Is={class:"card flex h-full flex-col p-4 md:p-6"},qs={class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},Ds={key:0,class:"space-y-4"},Us={class:"rounded-lg bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:from-blue-900/20 dark:to-indigo-900/20"},Rs={class:"mb-3 flex items-center justify-between"},js={class:"rounded-full bg-blue-100 px-2 py-1 text-xs font-semibold text-blue-700 dark:bg-blue-800 dark:text-blue-200"},Os={class:"grid grid-cols-2 gap-3"},Ns={class:"text-center"},Es={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},Fs={class:"text-center"},Ws={class:"text-lg font-bold text-green-600"},Bs={class:"rounded-lg bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:from-purple-900/20 dark:to-pink-900/20"},Vs={class:"space-y-2"},zs={class:"flex items-center justify-between"},Js={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Ys={class:"flex items-center justify-between"},Hs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Gs={class:"flex items-center justify-between"},Qs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Xs={key:0,class:"rounded-lg bg-red-50 p-3 text-sm dark:bg-red-900/20"},Zs={class:"text-red-700 dark:text-red-300"},ta={key:1,class:"space-y-4 md:space-y-5"},ea={class:"mb-2 flex items-center justify-between"},sa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},aa={key:0},ra={key:1,class:"flex items-center gap-1"},ia={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},la={key:1,class:"h-2 w-full rounded-full bg-gray-200"},oa={class:"mb-2 flex items-center justify-between"},na={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},da={key:0},ca={key:1,class:"flex items-center gap-1"},ua={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ma={key:1,class:"h-2 w-full rounded-full bg-gray-200"},fa={key:0},xa={class:"mb-2 flex items-center justify-between"},ga={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},ya={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},pa={key:1},va={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ba={key:0},_a={key:1},ka={key:2},ha={class:"space-y-4 border-t border-gray-100 pt-3 dark:border-gray-700"},wa={class:"flex items-center justify-between"},$a={class:"text-sm font-medium text-gray-900 md:text-base"},Sa={key:0},Ca={key:1,class:"flex items-center gap-1"},Ta={class:"flex items-center justify-between"},Ka={class:"text-sm font-medium text-gray-900 md:text-base"},La={key:0,class:"text-orange-600"},Aa={key:1,class:"text-green-600"},Pa={class:"space-y-2"},Ma={class:"flex items-center justify-between"},Ia={class:"text-sm font-medium text-gray-900 md:text-base"},qa={key:0,class:"text-orange-600"},Da={key:1,class:"text-green-600"},Ua={key:0,class:"flex flex-wrap gap-2 rounded-lg bg-blue-50 p-2 dark:bg-blue-900/20 md:p-3"},Ra={key:0,class:"card p-4 md:p-6"},ja={class:"rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800 dark:bg-amber-900/20 md:p-4"},Oa={class:"space-y-1 md:space-y-2"},Na={class:"break-all text-gray-800 dark:text-gray-200"},Ea={__name:"LimitConfig",setup(O){const p=X(),{statsData:s,multiKeyMode:g,aggregatedStats:f,invalidKeys:y}=G(p),m=N(()=>{var r;const c=(r=s.value)==null?void 0:r.restrictions;return c?c.enableModelRestriction===!0&&Array.isArray(c.restrictedModels)&&c.restrictedModels.length>0:!1}),v=N(()=>{var r;const c=(r=s.value)==null?void 0:r.restrictions;return c?c.enableClientRestriction===!0&&Array.isArray(c.allowedClients)&&c.allowedClients.length>0:!1}),w=()=>{if(!s.value.limits.dailyCostLimit||s.value.limits.dailyCostLimit===0)return 0;const c=s.value.limits.currentDailyCost/s.value.limits.dailyCostLimit*100;return Math.min(c,100)},M=()=>{const c=w();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-green-500"},x=()=>{if(!s.value.limits.totalCostLimit||s.value.limits.totalCostLimit===0)return 0;const c=s.value.limits.currentTotalCost/s.value.limits.totalCostLimit*100;return Math.min(c,100)},C=()=>{const c=x();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-blue-500"},R=()=>{if(!s.value.limits.weeklyOpusCostLimit||s.value.limits.weeklyOpusCostLimit===0)return 0;const c=s.value.limits.weeklyOpusCost/s.value.limits.weeklyOpusCostLimit*100;return Math.min(c,100)},h=()=>{const c=R();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-indigo-500"},_=c=>(typeof c!="number"&&(c=parseInt(c)||0),c===0?"0":c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":c.toLocaleString());return(c,r)=>(o(),n("div",Ms,[t("div",Is,[t("h3",qs,[r[0]||(r[0]=t("i",{class:"fas fa-shield-alt mr-2 text-sm text-red-500 md:mr-3 md:text-base"},null,-1)),k(" "+l(e(g)?"限制配置(聚合查询模式)":"限制配置"),1)]),e(g)&&e(f)?(o(),n("div",Ds,[t("div",Us,[t("div",Rs,[r[1]||(r[1]=t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-blue-500"}),k(" API Keys 概况 ")],-1)),t("span",js,l(e(f).activeKeys)+"/"+l(e(f).totalKeys),1)]),t("div",Os,[t("div",Ns,[t("div",Es,l(e(f).totalKeys),1),r[2]||(r[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"总计 Keys",-1))]),t("div",Fs,[t("div",Ws,l(e(f).activeKeys),1),r[3]||(r[3]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"激活 Keys",-1))])])]),t("div",Bs,[r[7]||(r[7]=t("div",{class:"mb-3 flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-purple-500"}),t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"聚合统计摘要")],-1)),t("div",Vs,[t("div",zs,[r[4]||(r[4]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-database mr-1 text-gray-400"}),k(" 总请求数 ")],-1)),t("span",Js,l(_(e(f).usage.requests)),1)]),t("div",Ys,[r[5]||(r[5]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-coins mr-1 text-yellow-500"}),k(" 总 Tokens ")],-1)),t("span",Hs,l(_(e(f).usage.allTokens)),1)]),t("div",Gs,[r[6]||(r[6]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-dollar-sign mr-1 text-green-500"}),k(" 总费用 ")],-1)),t("span",Qs,l(e(f).usage.formattedCost),1)])])]),e(y)&&e(y).length>0?(o(),n("div",Xs,[r[8]||(r[8]=t("i",{class:"fas fa-exclamation-triangle mr-2 text-red-600 dark:text-red-400"},null,-1)),t("span",Zs,l(e(y).length)+" 个无效的 API Key ",1)])):L("",!0),r[9]||(r[9]=t("div",{class:"rounded-lg bg-gray-50 p-3 text-xs text-gray-600 dark:bg-gray-800 dark:text-gray-400"},[t("i",{class:"fas fa-info-circle mr-1"}),k(" 每个 API Key 有独立的限制设置,聚合模式下不显示单个限制配置 ")],-1))])):L("",!0),e(g)?L("",!0):(o(),n("div",ta,[t("div",null,[t("div",ea,[r[11]||(r[11]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"每日费用限制",-1)),t("span",sa,[e(s).limits.dailyCostLimit>0?(o(),n("span",aa," $"+l(e(s).limits.currentDailyCost.toFixed(4))+" / $"+l(e(s).limits.dailyCostLimit.toFixed(2)),1)):(o(),n("span",ra,[k(" $"+l(e(s).limits.currentDailyCost.toFixed(4))+" / ",1),r[10]||(r[10]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.dailyCostLimit>0?(o(),n("div",ia,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",M()]),style:tt({width:w()+"%"})},null,6)])):(o(),n("div",la,r[12]||(r[12]=[t("div",{class:"h-2 rounded-full bg-green-500",style:{width:"0%"}},null,-1)])))]),t("div",null,[t("div",oa,[r[14]||(r[14]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"总费用限制",-1)),t("span",na,[e(s).limits.totalCostLimit>0?(o(),n("span",da," $"+l(e(s).limits.currentTotalCost.toFixed(4))+" / $"+l(e(s).limits.totalCostLimit.toFixed(2)),1)):(o(),n("span",ca,[k(" $"+l(e(s).limits.currentTotalCost.toFixed(4))+" / ",1),r[13]||(r[13]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.totalCostLimit>0?(o(),n("div",ua,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",C()]),style:tt({width:x()+"%"})},null,6)])):(o(),n("div",ma,r[15]||(r[15]=[t("div",{class:"h-2 rounded-full bg-blue-500",style:{width:"0%"}},null,-1)])))]),e(s).limits.weeklyOpusCostLimit>0?(o(),n("div",fa,[t("div",xa,[r[16]||(r[16]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"Opus 模型周费用限制",-1)),t("span",ga," $"+l(e(s).limits.weeklyOpusCost.toFixed(4))+" / $"+l(e(s).limits.weeklyOpusCostLimit.toFixed(2)),1)]),t("div",ya,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",h()]),style:tt({width:R()+"%"})},null,6)])])):L("",!0),e(s).limits.rateLimitWindow>0&&(e(s).limits.rateLimitRequests>0||e(s).limits.tokenLimit>0||e(s).limits.rateLimitCost>0)?(o(),n("div",pa,[J(Ct,{"cost-limit":e(s).limits.rateLimitCost,"current-cost":e(s).limits.currentWindowCost,"current-requests":e(s).limits.currentWindowRequests,"current-tokens":e(s).limits.currentWindowTokens,label:"时间窗口限制","rate-limit-window":e(s).limits.rateLimitWindow,"request-limit":e(s).limits.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":e(s).limits.tokenLimit,"window-end-time":e(s).limits.windowEndTime,"window-remaining-seconds":e(s).limits.windowRemainingSeconds,"window-start-time":e(s).limits.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"]),t("div",va,[r[17]||(r[17]=t("i",{class:"fas fa-info-circle mr-1"},null,-1)),e(s).limits.rateLimitCost>0?(o(),n("span",ba,' 请求次数和费用限制为"或"的关系,任一达到限制即触发限流 ')):e(s).limits.tokenLimit>0?(o(),n("span",_a,' 请求次数和Token使用量为"或"的关系,任一达到限制即触发限流 ')):(o(),n("span",ka," 仅限制请求次数 "))])])):L("",!0),t("div",ha,[t("div",wa,[r[19]||(r[19]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"并发限制",-1)),t("span",$a,[e(s).limits.concurrencyLimit>0?(o(),n("span",Sa,l(e(s).limits.concurrencyLimit),1)):(o(),n("span",Ca,r[18]||(r[18]=[t("i",{class:"fas fa-infinity text-gray-400"},null,-1)])))])]),t("div",Ta,[r[22]||(r[22]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"模型限制",-1)),t("span",Ka,[m.value?(o(),n("span",La,[r[20]||(r[20]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),k(" 限制 "+l(e(s).restrictions.restrictedModels.length)+" 个模型 ",1)])):(o(),n("span",Aa,r[21]||(r[21]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),k(" 允许所有模型 ",-1)])))])]),t("div",Pa,[t("div",Ma,[r[25]||(r[25]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"客户端限制",-1)),t("span",Ia,[v.value?(o(),n("span",qa,[r[23]||(r[23]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),k(" 限 "+l(e(s).restrictions.allowedClients.length)+" 种客户端使用 ",1)])):(o(),n("span",Da,r[24]||(r[24]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),k(" 允许所有客户端 ",-1)])))])]),v.value?(o(),n("div",Ua,[(o(!0),n(z,null,H(e(s).restrictions.allowedClients,K=>(o(),n("span",{key:K,class:"flex items-center gap-1 rounded-full bg-white px-2 py-1 text-xs text-blue-700 shadow-sm dark:bg-slate-900 dark:text-blue-300 md:text-sm"},[r[26]||(r[26]=t("i",{class:"fas fa-id-badge"},null,-1)),k(" "+l(K),1)]))),128))])):L("",!0)])])]))]),m.value?(o(),n("div",Ra,[r[30]||(r[30]=t("h3",{class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},[t("i",{class:"fas fa-list-alt mr-2 text-sm text-amber-500 md:mr-3 md:text-base"}),k(" 详细限制信息 ")],-1)),t("div",ja,[r[28]||(r[28]=t("h4",{class:"mb-2 flex items-center text-sm font-bold text-amber-800 dark:text-amber-300 md:mb-3 md:text-base"},[t("i",{class:"fas fa-robot mr-1 text-xs md:mr-2 md:text-sm"}),k(" 受限模型列表 ")],-1)),t("div",Oa,[(o(!0),n(z,null,H(e(s).restrictions.restrictedModels,K=>(o(),n("div",{key:K,class:"rounded border border-amber-200 bg-white px-2 py-1 text-xs dark:border-amber-700 dark:bg-gray-800 md:px-3 md:py-2 md:text-sm"},[r[27]||(r[27]=t("i",{class:"fas fa-ban mr-1 text-xs text-red-500 md:mr-2"},null,-1)),t("span",Na,l(K),1)]))),128))]),r[29]||(r[29]=t("p",{class:"mt-2 text-xs text-amber-700 dark:text-amber-400 md:mt-3"},[t("i",{class:"fas fa-info-circle mr-1"}),k(" 此 API Key 不能访问以上列出的模型 ")],-1))])])):L("",!0)]))}},Fa=Q(Ea,[["__scopeId","data-v-4e85e423"]]),Wa={class:"card h-full p-4 md:p-6"},Ba={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},Va={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},za={key:0,class:"space-y-2 md:space-y-3"},Ja={class:"mb-1 flex items-center justify-between text-sm"},Ya={class:"truncate font-medium text-gray-700 dark:text-gray-300"},Ha={class:"text-xs text-gray-600 dark:text-gray-400"},Ga={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Qa={class:"mt-1 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Xa={key:0,class:"border-t border-gray-200 pt-2 dark:border-gray-700"},Za={class:"flex items-center justify-between text-sm text-gray-600 dark:text-gray-400"},tr={key:1,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},er={key:2,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},sr={__name:"AggregatedStatsCard",setup(O){const p=X(),{aggregatedStats:s,individualStats:g,statsPeriod:f,multiKeyMode:y}=G(p),m=h=>h?f.value==="daily"?h.dailyUsage||h.usage:h.monthlyUsage||h.usage:null,v=N(()=>!g.value||g.value.length===0?[]:[...g.value].sort((h,_)=>{const c=m(h),r=m(_);return((r==null?void 0:r.cost)||0)-((c==null?void 0:c.cost)||0)}).slice(0,5)),w=N(()=>g.value?Math.max(0,g.value.length-5):0),M=N(()=>{var r,K;if(!g.value||!s.value)return 0;const h=v.value.reduce((j,Y)=>{const W=m(Y);return j+((W==null?void 0:W.cost)||0)},0),_=f.value==="daily"?((r=s.value.dailyUsage)==null?void 0:r.cost)||0:((K=s.value.monthlyUsage)==null?void 0:K.cost)||0;if(_===0)return 0;const c=_-h;return Math.max(0,Math.round(c/_*100))}),x=h=>{var K,j;if(!s.value)return 0;const _=f.value==="daily"?((K=s.value.dailyUsage)==null?void 0:K.cost)||0:((j=s.value.monthlyUsage)==null?void 0:j.cost)||0;if(_===0)return 0;const c=m(h),r=((c==null?void 0:c.cost)||0)/_*100;return Math.round(r)},C=h=>["bg-blue-500","bg-green-500","bg-purple-500","bg-yellow-500","bg-pink-500"][h]||"bg-gray-400",R=h=>(typeof h!="number"&&(h=parseInt(h)||0),h===0?"0":h>=1e6?(h/1e6).toFixed(1)+"M":h>=1e3?(h/1e3).toFixed(1)+"K":h.toLocaleString());return(h,_)=>(o(),n("div",Wa,[t("h3",Ba,[_[0]||(_[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-sm text-orange-500 md:mr-3 md:text-base"}),k(" 使用占比 ")],-1)),t("span",Va,"("+l(e(f)==="daily"?"今日":"本月")+")",1)]),e(s)&&e(g).length>0?(o(),n("div",za,[(o(!0),n(z,null,H(v.value,(c,r)=>{var K,j;return o(),n("div",{key:c.apiId,class:"relative"},[t("div",Ja,[t("span",Ya,l(c.name||`Key ${r+1}`),1),t("span",Ha,l(x(c))+"% ",1)]),t("div",Ga,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",C(r)]),style:tt({width:x(c)+"%"})},null,6)]),t("div",Qa,[t("span",null,l(R(((K=m(c))==null?void 0:K.requests)||0))+"次",1),t("span",null,l(((j=m(c))==null?void 0:j.formattedCost)||"$0.00"),1)])])}),128)),w.value>0?(o(),n("div",Xa,[t("div",Za,[t("span",null,"其他 "+l(w.value)+" 个Keys",1),t("span",null,l(M.value)+"%",1)])])):L("",!0)])):e(y)?(o(),n("div",er,_[2]||(_[2]=[t("i",{class:"fas fa-chart-pie mr-2"},null,-1),k(" 暂无数据 ",-1)]))):(o(),n("div",tr,_[1]||(_[1]=[t("div",{class:"text-center"},[t("i",{class:"fas fa-chart-pie mb-2 text-2xl"}),t("p",null,"使用占比仅在多Key查询时显示")],-1)])))]))}},ar=Q(sr,[["__scopeId","data-v-39572a8e"]]),rr={class:"card p-4 md:p-6"},ir={class:"mb-4 md:mb-6"},lr={class:"flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:text-xl"},or={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},nr={key:0,class:"py-6 text-center md:py-8"},dr={key:1,class:"space-y-3 md:space-y-4"},cr={class:"mb-2 flex items-start justify-between md:mb-3"},ur={class:"min-w-0 flex-1"},mr={class:"break-all text-base font-bold text-gray-900 dark:text-gray-100 md:text-lg"},fr={class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},xr={class:"ml-3 flex-shrink-0 text-right"},gr={class:"text-base font-bold text-green-600 md:text-lg"},yr={class:"grid grid-cols-2 gap-2 text-xs md:grid-cols-4 md:gap-3 md:text-sm"},pr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},vr={class:"font-medium text-gray-900 dark:text-gray-100"},br={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},_r={class:"font-medium text-gray-900 dark:text-gray-100"},kr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},hr={class:"font-medium text-gray-900 dark:text-gray-100"},wr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},$r={class:"font-medium text-gray-900 dark:text-gray-100"},Sr={key:2,class:"py-6 text-center text-gray-500 dark:text-gray-400 md:py-8"},Cr={class:"text-sm md:text-base"},Tr={__name:"ModelUsageStats",setup(O){const p=X(),{statsPeriod:s,modelStats:g,modelStatsLoading:f}=G(p),y=m=>(typeof m!="number"&&(m=parseInt(m)||0),m===0?"0":m>=1e6?(m/1e6).toFixed(1)+"M":m>=1e3?(m/1e3).toFixed(1)+"K":m.toLocaleString());return(m,v)=>(o(),n("div",rr,[t("div",ir,[t("h3",lr,[v[0]||(v[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-robot mr-2 text-sm text-indigo-500 md:mr-3 md:text-base"}),k(" 模型使用统计 ")],-1)),t("span",or,"("+l(e(s)==="daily"?"今日":"本月")+")",1)])]),e(f)?(o(),n("div",nr,v[1]||(v[1]=[t("i",{class:"fas fa-spinner loading-spinner mb-2 text-xl text-gray-600 dark:text-gray-400 md:text-2xl"},null,-1),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"加载模型统计数据中...",-1)]))):e(g).length>0?(o(),n("div",dr,[(o(!0),n(z,null,H(e(g),(w,M)=>{var x;return o(),n("div",{key:M,class:"model-usage-item"},[t("div",cr,[t("div",ur,[t("h4",mr,l(w.model),1),t("p",fr,l(w.requests)+" 次请求 ",1)]),t("div",xr,[t("div",gr,l(((x=w.formatted)==null?void 0:x.total)||"$0.000000"),1),v[2]||(v[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},"总费用",-1))])]),t("div",yr,[t("div",pr,[v[3]||(v[3]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输入 Token",-1)),t("div",vr,l(y(w.inputTokens)),1)]),t("div",br,[v[4]||(v[4]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输出 Token",-1)),t("div",_r,l(y(w.outputTokens)),1)]),t("div",kr,[v[5]||(v[5]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存创建",-1)),t("div",hr,l(y(w.cacheCreateTokens)),1)]),t("div",wr,[v[6]||(v[6]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存读取",-1)),t("div",$r,l(y(w.cacheReadTokens)),1)])])])}),128))])):(o(),n("div",Sr,[v[7]||(v[7]=t("i",{class:"fas fa-chart-pie mb-3 text-2xl md:text-3xl"},null,-1)),t("p",Cr," 暂无"+l(e(s)==="daily"?"今日":"本月")+"模型使用数据 ",1)]))]))}},Kr=Q(Tr,[["__scopeId","data-v-b3b8dc5f"]]),Lr={class:"glass-strong mb-6 rounded-3xl p-4 shadow-xl md:mb-8 md:p-6"},Ar={class:"flex flex-col items-center justify-between gap-4 md:flex-row"},Pr={class:"flex items-center gap-2 md:gap-4"},Mr={class:"flex items-center"},Ir={key:0,class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},qr={class:"mb-6 md:mb-8"},Dr={class:"flex justify-center"},Ur={class:"inline-flex w-full max-w-md rounded-full border border-white/20 bg-white/10 p-1 shadow-lg backdrop-blur-xl md:w-auto"},Rr={key:0,class:"tab-content"},jr={key:0,class:"mb-6 md:mb-8"},Or={class:"rounded-xl border border-red-500/30 bg-red-500/20 p-3 text-sm text-red-800 backdrop-blur-sm dark:border-red-500/20 dark:bg-red-500/10 dark:text-red-200 md:p-4 md:text-base"},Nr={key:1,class:"fade-in"},Er={class:"glass-strong rounded-3xl p-4 shadow-xl md:p-6"},Fr={class:"mb-4 border-b border-gray-200 pb-4 dark:border-gray-700 md:mb-6 md:pb-6"},Wr={class:"flex flex-col items-start justify-between gap-3 md:flex-row md:items-center md:gap-4"},Br={class:"flex w-full gap-2 md:w-auto"},Vr=["disabled"],zr=["disabled"],Jr={class:"mb-6 mt-6 grid grid-cols-1 gap-4 md:mb-8 md:mt-8 md:gap-6 xl:grid-cols-2 xl:items-stretch"},Yr={key:1,class:"tab-content"},Hr={class:"glass-strong rounded-3xl shadow-xl"},Gr={__name:"ApiStatsView",setup(O){const p=vt(),s=X(),g=ht(),f=D("stats"),y=N(()=>g.isDarkMode),{apiKey:m,apiId:v,loading:w,modelStatsLoading:M,oemLoading:x,error:C,statsPeriod:R,statsData:h,oemSettings:_,multiKeyMode:c}=G(s),{queryStats:r,switchPeriod:K,loadStatsWithApiId:j,loadOemSettings:Y,reset:W}=s,F=q=>{(q.ctrlKey||q.metaKey)&&q.key==="Enter"&&(!w.value&&m.value.trim()&&r(),q.preventDefault()),q.key==="Escape"&&W()};return pt(()=>{g.initTheme(),Y();const q=p.query.apiId,$=p.query.apiKey;q&&q.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)?(v.value=q,j()):$&&$.length>10&&(m.value=$),document.addEventListener("keydown",F)}),bt(()=>{document.removeEventListener("keydown",F)}),_t(m,q=>{q||s.clearData()}),(q,$)=>{const Z=kt("router-link");return o(),n("div",{class:P(["min-h-screen p-4 md:p-6",y.value?"gradient-bg-dark":"gradient-bg"])},[t("div",Lr,[t("div",Ar,[J(wt,{loading:e(x),"logo-src":e(_).siteIconData||e(_).siteIcon,subtitle:f.value==="stats"?"API Key 使用统计":"使用教程",title:e(_).siteName},null,8,["loading","logo-src","subtitle","title"]),t("div",Pr,[t("div",Mr,[J($t,{mode:"dropdown"})]),e(_).ldapEnabled||e(_).showAdminButton!==!1?(o(),n("div",Ir)):L("",!0),e(_).ldapEnabled?(o(),rt(Z,{key:1,class:"user-login-button flex items-center gap-2 rounded-2xl px-4 py-2 text-white transition-all duration-300 md:px-5 md:py-2.5",to:"/user-login"},{default:xt(()=>$[4]||($[4]=[t("i",{class:"fas fa-user text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"用户登录",-1)])),_:1,__:[4]})):L("",!0),e(_).showAdminButton!==!1?(o(),rt(Z,{key:2,class:"admin-button-refined flex items-center gap-2 rounded-2xl px-4 py-2 transition-all duration-300 md:px-5 md:py-2.5",to:"/dashboard"},{default:xt(()=>$[5]||($[5]=[t("i",{class:"fas fa-shield-alt text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"管理后台",-1)])),_:1,__:[5]})):L("",!0)])])]),t("div",qr,[t("div",Dr,[t("div",Ur,[t("button",{class:P(["tab-pill-button",f.value==="stats"?"active":""]),onClick:$[0]||($[0]=B=>f.value="stats")},$[6]||($[6]=[t("i",{class:"fas fa-chart-line mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"统计查询",-1)]),2),t("button",{class:P(["tab-pill-button",f.value==="tutorial"?"active":""]),onClick:$[1]||($[1]=B=>f.value="tutorial")},$[7]||($[7]=[t("i",{class:"fas fa-graduation-cap mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"使用教程",-1)]),2)])])]),f.value==="stats"?(o(),n("div",Rr,[J(Yt),e(C)?(o(),n("div",jr,[t("div",Or,[$[8]||($[8]=t("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),k(" "+l(e(C)),1)])])):L("",!0),e(h)?(o(),n("div",Nr,[t("div",Er,[t("div",Fr,[t("div",Wr,[$[11]||($[11]=t("div",{class:"flex items-center gap-2 md:gap-3"},[t("i",{class:"fas fa-clock text-base text-blue-500 md:text-lg"}),t("span",{class:"text-base font-medium text-gray-700 dark:text-gray-200 md:text-lg"},"统计时间范围")],-1)),t("div",Br,[t("button",{class:P(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(R)==="daily"}]]),disabled:e(w)||e(M),onClick:$[2]||($[2]=B=>e(K)("daily"))},$[9]||($[9]=[t("i",{class:"fas fa-calendar-day text-xs md:text-sm"},null,-1),k(" 今日 ",-1)]),10,Vr),t("button",{class:P(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(R)==="monthly"}]]),disabled:e(w)||e(M),onClick:$[3]||($[3]=B=>e(K)("monthly"))},$[10]||($[10]=[t("i",{class:"fas fa-calendar-alt text-xs md:text-sm"},null,-1),k(" 本月 ",-1)]),10,zr)])])]),J(fs),t("div",Jr,[J(Ps,{class:"h-full"}),e(c)?(o(),rt(ar,{key:0,class:"h-full"})):(o(),rt(Fa,{key:1,class:"h-full"}))]),J(Kr)])])):L("",!0)])):L("",!0),f.value==="tutorial"?(o(),n("div",Yr,[t("div",Hr,[J(Tt)])])):L("",!0)],2)}}},ii=Q(Gr,[["__scopeId","data-v-4f94bab5"]]);export{ii as default};