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