import{aR as Y,r as h,c as z,aW as A,x as d,y as m,z as t,O as f,K as H,aq as Q,u as s,aa as G,f as X,P as r,C as I,L as T,B as Z,R as S,Q as N,ac as O,q as tt,aU as et,V as st,o as at,J as it,av as ot}from"./vue-vendor-DfnFpxGJ.js";import{L as lt}from"./LogoTitle-DTE_Y2ZC.js";import{_ as q}from"./index-NpFg0ijv.js";import{b as nt}from"./vendor-BDiMbLwQ.js";import{_ as rt}from"./WindowCountdown-RaAYa1A3.js";import dt from"./TutorialView-Dfi5XMr9.js";import"./element-plus-BaMaLFJp.js";class mt{constructor(){this.baseURL=window.location.origin,this.isDev=!1}async request(n,a={}){try{this.isDev&&n.startsWith("/admin")&&(n="/webapi"+n);const l=await fetch(`${this.baseURL}${n}`,{headers:{"Content-Type":"application/json",...a.headers},...a}),p=await l.json();if(!l.ok)throw new Error(p.message||`请求失败: ${l.status}`);return p}catch(l){throw console.error("API Stats request error:",l),l}}async getKeyId(n){return this.request("/apiStats/api/get-key-id",{method:"POST",body:JSON.stringify({apiKey:n})})}async getUserStats(n){return this.request("/apiStats/api/user-stats",{method:"POST",body:JSON.stringify({apiId:n})})}async getUserModelStats(n,a="daily"){return this.request("/apiStats/api/user-model-stats",{method:"POST",body:JSON.stringify({apiId:n,period:a})})}async getOemSettings(){try{return await this.request("/admin/oem-settings")}catch(n){return console.error("Failed to load OEM settings:",n),{success:!0,data:{siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}}}}const P=new mt,K=Y("apistats",()=>{const $=h(""),n=h(null),a=h(!1),l=h(!1),p=h(!0),c=h(""),e=h("daily"),o=h(null),b=h([]),v=h(null),w=h(null),u=h({siteName:"",siteIcon:"",siteIconData:""}),x=z(()=>{const i={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};return e.value==="daily"?v.value||i:w.value||i}),U=z(()=>{if(!o.value||!x.value)return{tokenUsage:0,costUsage:0,requestUsage:0};const i=x.value,g=o.value.limits;return{tokenUsage:g.tokenLimit>0?Math.min(i.allTokens/g.tokenLimit*100,100):0,costUsage:g.dailyCostLimit>0?Math.min(i.cost/g.dailyCostLimit*100,100):0,requestUsage:g.rateLimitRequests>0?Math.min(i.requests/g.rateLimitRequests*100,100):0}});async function C(){if(!$.value.trim()){c.value="请输入 API Key";return}a.value=!0,c.value="",o.value=null,b.value=[],n.value=null;try{const i=await P.getKeyId($.value);if(i.success){n.value=i.data.id;const g=await P.getUserStats(n.value);if(g.success)o.value=g.data,await R(),c.value="",j();else throw new Error(g.message||"查询失败")}else throw new Error(i.message||"获取 API Key ID 失败")}catch(i){console.error("Query stats error:",i),c.value=i.message||"查询统计数据失败,请检查您的 API Key 是否正确",o.value=null,b.value=[],n.value=null}finally{a.value=!1}}async function R(){n.value&&(await Promise.all([D("daily"),D("monthly")]),await M(e.value))}async function D(i){try{const g=await P.getUserModelStats(n.value,i);if(g.success){const J=g.data||[],k={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};J.forEach(L=>{var W;k.requests+=L.requests||0,k.inputTokens+=L.inputTokens||0,k.outputTokens+=L.outputTokens||0,k.cacheCreateTokens+=L.cacheCreateTokens||0,k.cacheReadTokens+=L.cacheReadTokens||0,k.allTokens+=L.allTokens||0,k.cost+=((W=L.costs)==null?void 0:W.total)||0}),k.formattedCost=F(k.cost),i==="daily"?v.value=k:w.value=k}else console.warn(`Failed to load ${i} stats:`,g.message)}catch(g){console.error(`Load ${i} stats error:`,g)}}async function M(i="daily"){if(n.value){l.value=!0;try{const g=await P.getUserModelStats(n.value,i);if(g.success)b.value=g.data||[];else throw new Error(g.message||"加载模型统计失败")}catch(g){console.error("Load model stats error:",g),b.value=[]}finally{l.value=!1}}}async function E(i){e.value===i||l.value||(e.value=i,(i==="daily"&&!v.value||i==="monthly"&&!w.value)&&await D(i),await M(i))}async function _(){if(n.value){a.value=!0,c.value="",o.value=null,b.value=[];try{const i=await P.getUserStats(n.value);if(i.success)o.value=i.data,await R(),c.value="";else throw new Error(i.message||"查询失败")}catch(i){console.error("Load stats with apiId error:",i),c.value=i.message||"查询统计数据失败",o.value=null,b.value=[]}finally{a.value=!1}}}async function y(){p.value=!0;try{const i=await P.getOemSettings();i&&i.success&&i.data&&(u.value={...u.value,...i.data})}catch(i){console.error("Error loading OEM settings:",i),u.value={siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}finally{p.value=!1}}function F(i){return typeof i!="number"||i===0?"$0.000000":i>=1?"$"+i.toFixed(2):i>=.01?"$"+i.toFixed(4):"$"+i.toFixed(6)}function j(){if(n.value){const i=new URL(window.location);i.searchParams.set("apiId",n.value),window.history.pushState({},"",i)}}function V(){o.value=null,b.value=[],v.value=null,w.value=null,c.value="",e.value="daily",n.value=null}function B(){$.value="",V()}return{apiKey:$,apiId:n,loading:a,modelStatsLoading:l,oemLoading:p,error:c,statsPeriod:e,statsData:o,modelStats:b,dailyStats:v,monthlyStats:w,oemSettings:u,currentPeriodData:x,usagePercentages:U,queryStats:C,loadAllPeriodStats:R,loadPeriodStats:D,loadModelStats:M,switchPeriod:E,loadStatsWithApiId:_,loadOemSettings:y,clearData:V,reset:B}}),ct={class:"api-input-wide-card glass-strong mb-8 rounded-3xl p-6 shadow-xl"},xt={class:"mx-auto max-w-4xl"},ut={class:"api-input-grid grid grid-cols-1 lg:grid-cols-4"},ft={class:"lg:col-span-3"},pt=["disabled"],yt={class:"lg:col-span-1"},gt=["disabled"],bt={key:0,class:"fas fa-spinner loading-spinner"},vt={key:1,class:"fas fa-search"},_t={__name:"ApiKeyInput",setup($){const n=K(),{apiKey:a,loading:l}=A(n),{queryStats:p}=n;return(c,e)=>(m(),d("div",ct,[e[6]||(e[6]=t("div",{class:"wide-card-title mb-6 text-center"},[t("h2",{class:"mb-2 text-2xl font-bold"},[t("i",{class:"fas fa-chart-line mr-3"}),f(" 使用统计查询 ")]),t("p",{class:"text-base text-gray-600"},"查询您的 API Key 使用情况和统计数据")],-1)),t("div",xt,[t("div",ut,[t("div",ft,[e[3]||(e[3]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700"},[t("i",{class:"fas fa-key mr-2"}),f(" 输入您的 API Key ")],-1)),H(t("input",{"onUpdate:modelValue":e[0]||(e[0]=o=>X(a)?a.value=o:null),class:"wide-card-input w-full",disabled:s(l),placeholder:"请输入您的 API Key (cr_...)",type:"password",onKeyup:e[1]||(e[1]=G((...o)=>s(p)&&s(p)(...o),["enter"]))},null,40,pt),[[Q,s(a)]])]),t("div",yt,[e[4]||(e[4]=t("label",{class:"mb-2 hidden text-sm font-medium text-gray-700 lg:block"},"   ",-1)),t("button",{class:"btn btn-primary btn-query flex h-full w-full items-center justify-center gap-2",disabled:s(l)||!s(a).trim(),onClick:e[2]||(e[2]=(...o)=>s(p)&&s(p)(...o))},[s(l)?(m(),d("i",bt)):(m(),d("i",vt)),f(" "+r(s(l)?"查询中...":"查询统计"),1)],8,gt)])]),e[5]||(e[5]=t("div",{class:"security-notice mt-4"},[t("i",{class:"fas fa-shield-alt mr-2"}),f(" 您的 API Key 仅用于查询自己的统计数据,不会被存储或用于其他用途 ")],-1))])]))}},wt=q(_t,[["__scopeId","data-v-b6734c94"]]),ht={class:"mb-6 grid grid-cols-1 gap-4 md:mb-8 md:gap-6 lg:grid-cols-2"},$t={class:"card p-4 md:p-6"},kt={class:"space-y-2 md:space-y-3"},St={class:"flex items-center justify-between"},Tt={class:"break-all text-sm font-medium text-gray-900 md:text-base"},Ct={class:"flex items-center justify-between"},Lt={class:"flex items-center justify-between"},It={class:"text-sm font-medium text-gray-900 md:text-base"},Dt={class:"flex items-center justify-between"},Pt={class:"break-all text-xs font-medium text-gray-900 md:text-base"},At={class:"flex items-start justify-between"},qt={key:0,class:"text-right"},Kt={key:0,class:"text-sm font-medium text-red-600 md:text-base"},Rt={key:1,class:"break-all text-xs font-medium text-orange-600 md:text-base"},Mt={key:2,class:"break-all text-xs font-medium text-gray-900 md:text-base"},jt={key:1,class:"text-sm font-medium text-gray-400 md:text-base"},Ut={class:"card p-4 md:p-6"},Et={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 sm:flex-row sm:items-center md:mb-4 md:text-xl"},Ft={class:"text-xs font-normal text-gray-600 sm:ml-2 md:text-sm"},Nt={class:"grid grid-cols-2 gap-3 md:gap-4"},Ot={class:"stat-card text-center"},Vt={class:"text-lg font-bold text-green-600 md:text-3xl"},Wt={class:"text-xs text-gray-600 md:text-sm"},zt={class:"stat-card text-center"},Bt={class:"text-lg font-bold text-blue-600 md:text-3xl"},Jt={class:"text-xs text-gray-600 md:text-sm"},Yt={class:"stat-card text-center"},Ht={class:"text-lg font-bold text-purple-600 md:text-3xl"},Qt={class:"text-xs text-gray-600 md:text-sm"},Gt={class:"stat-card text-center"},Xt={class:"text-lg font-bold text-yellow-600 md:text-3xl"},Zt={class:"text-xs text-gray-600 md:text-sm"},te={__name:"StatsOverview",setup($){const n=K(),{statsData:a,statsPeriod:l,currentPeriodData:p}=A(n),c=u=>{if(!u)return"无";try{return nt(u).format("YYYY年MM月DD日 HH:mm")}catch{return"格式错误"}},e=u=>u?new Date(u).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",o=u=>u?new Date(u){if(!u)return!1;const C=(new Date(u)-new Date)/(1e3*60*60*24);return C>0&&C<=7},v=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()),w=u=>({claude:"Claude",gemini:"Gemini",all:"全部模型"})[u]||u||"未知";return(u,x)=>(m(),d("div",ht,[t("div",$t,[x[8]||(x[8]=t("h3",{class:"mb-3 flex items-center text-lg font-bold text-gray-900 md:mb-4 md:text-xl"},[t("i",{class:"fas fa-info-circle mr-2 text-sm text-blue-500 md:mr-3 md:text-base"}),f(" API Key 信息 ")],-1)),t("div",kt,[t("div",St,[x[0]||(x[0]=t("span",{class:"text-sm text-gray-600 md:text-base"},"名称",-1)),t("span",Tt,r(s(a).name),1)]),t("div",Ct,[x[1]||(x[1]=t("span",{class:"text-sm text-gray-600 md:text-base"},"状态",-1)),t("span",{class:I(["text-sm font-medium md:text-base",s(a).isActive?"text-green-600":"text-red-600"])},[t("i",{class:I(["mr-1 text-xs md:text-sm",s(a).isActive?"fas fa-check-circle":"fas fa-times-circle"])},null,2),f(" "+r(s(a).isActive?"活跃":"已停用"),1)],2)]),t("div",Lt,[x[2]||(x[2]=t("span",{class:"text-sm text-gray-600 md:text-base"},"权限",-1)),t("span",It,r(w(s(a).permissions)),1)]),t("div",Dt,[x[3]||(x[3]=t("span",{class:"text-sm text-gray-600 md:text-base"},"创建时间",-1)),t("span",Pt,r(c(s(a).createdAt)),1)]),t("div",At,[x[7]||(x[7]=t("span",{class:"mt-1 flex-shrink-0 text-sm text-gray-600 md:text-base"},"过期时间",-1)),s(a).expiresAt?(m(),d("div",qt,[o(s(a).expiresAt)?(m(),d("div",Kt,x[4]||(x[4]=[t("i",{class:"fas fa-exclamation-circle mr-1 text-xs md:text-sm"},null,-1),f(" 已过期 ",-1)]))):b(s(a).expiresAt)?(m(),d("div",Rt,[x[5]||(x[5]=t("i",{class:"fas fa-clock mr-1 text-xs md:text-sm"},null,-1)),f(" "+r(e(s(a).expiresAt)),1)])):(m(),d("div",Mt,r(e(s(a).expiresAt)),1))])):(m(),d("div",jt,x[6]||(x[6]=[t("i",{class:"fas fa-infinity mr-1 text-xs md:text-sm"},null,-1),f(" 永不过期 ",-1)])))])])]),t("div",Ut,[t("h3",Et,[x[9]||(x[9]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-chart-bar mr-2 text-sm text-green-500 md:mr-3 md:text-base"}),f(" 使用统计概览 ")],-1)),t("span",Ft,"("+r(s(l)==="daily"?"今日":"本月")+")",1)]),t("div",Nt,[t("div",Ot,[t("div",Vt,r(v(s(p).requests)),1),t("div",Wt,r(s(l)==="daily"?"今日":"本月")+"请求数 ",1)]),t("div",zt,[t("div",Bt,r(v(s(p).allTokens)),1),t("div",Jt,r(s(l)==="daily"?"今日":"本月")+"Token数 ",1)]),t("div",Yt,[t("div",Ht,r(s(p).formattedCost||"$0.000000"),1),t("div",Qt,r(s(l)==="daily"?"今日":"本月")+"费用 ",1)]),t("div",Gt,[t("div",Xt,r(v(s(p).inputTokens)),1),t("div",Zt,r(s(l)==="daily"?"今日":"本月")+"输入Token ",1)])])])]))}},ee=q(te,[["__scopeId","data-v-67e8770b"]]),se={class:"card p-4 md:p-6"},ae={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 sm:flex-row sm:items-center md:mb-4 md:text-xl"},ie={class:"text-xs font-normal text-gray-600 sm:ml-2 md:text-sm"},oe={class:"space-y-2 md:space-y-3"},le={class:"flex items-center justify-between"},ne={class:"text-sm font-medium text-gray-900 md:text-base"},re={class:"flex items-center justify-between"},de={class:"text-sm font-medium text-gray-900 md:text-base"},me={class:"flex items-center justify-between"},ce={class:"text-sm font-medium text-gray-900 md:text-base"},xe={class:"flex items-center justify-between"},ue={class:"text-sm font-medium text-gray-900 md:text-base"},fe={class:"mt-3 border-t border-gray-200 pt-3 md:mt-4 md:pt-4"},pe={class:"flex items-center justify-between font-bold text-gray-900"},ye={class:"text-sm md:text-base"},ge={class:"text-lg md:text-xl"},be={__name:"TokenDistribution",setup($){const n=K(),{statsPeriod:a,currentPeriodData:l}=A(n),p=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,e)=>(m(),d("div",se,[t("h3",ae,[e[0]||(e[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"}),f(" Token 使用分布 ")],-1)),t("span",ie,"("+r(s(a)==="daily"?"今日":"本月")+")",1)]),t("div",oe,[t("div",le,[e[1]||(e[1]=t("span",{class:"flex items-center text-sm text-gray-600 md:text-base"},[t("i",{class:"fas fa-arrow-right mr-1 text-xs text-green-500 md:mr-2 md:text-sm"}),f(" 输入 Token ")],-1)),t("span",ne,r(p(s(l).inputTokens)),1)]),t("div",re,[e[2]||(e[2]=t("span",{class:"flex items-center text-sm text-gray-600 md:text-base"},[t("i",{class:"fas fa-arrow-left mr-1 text-xs text-blue-500 md:mr-2 md:text-sm"}),f(" 输出 Token ")],-1)),t("span",de,r(p(s(l).outputTokens)),1)]),t("div",me,[e[3]||(e[3]=t("span",{class:"flex items-center text-sm text-gray-600 md:text-base"},[t("i",{class:"fas fa-save mr-1 text-xs text-purple-500 md:mr-2 md:text-sm"}),f(" 缓存创建 Token ")],-1)),t("span",ce,r(p(s(l).cacheCreateTokens)),1)]),t("div",xe,[e[4]||(e[4]=t("span",{class:"flex items-center text-sm text-gray-600 md:text-base"},[t("i",{class:"fas fa-download mr-1 text-xs text-orange-500 md:mr-2 md:text-sm"}),f(" 缓存读取 Token ")],-1)),t("span",ue,r(p(s(l).cacheReadTokens)),1)])]),t("div",fe,[t("div",pe,[t("span",ye,r(s(a)==="daily"?"今日":"本月")+"总计",1),t("span",ge,r(p(s(l).allTokens)),1)])])]))}},ve=q(be,[["__scopeId","data-v-0a106891"]]),_e={class:"card p-4 md:p-6"},we={class:"space-y-4 md:space-y-5"},he={class:"mb-2 flex items-center justify-between"},$e={class:"text-xs text-gray-500 md:text-sm"},ke={key:0},Se={key:1,class:"flex items-center gap-1"},Te={key:0,class:"h-2 w-full rounded-full bg-gray-200"},Ce={key:1,class:"h-2 w-full rounded-full bg-gray-200"},Le={key:0},Ie={class:"space-y-2 border-t border-gray-100 pt-2"},De={class:"flex items-center justify-between"},Pe={class:"text-sm font-medium text-gray-900 md:text-base"},Ae={key:0},qe={key:1,class:"flex items-center gap-1"},Ke={class:"flex items-center justify-between"},Re={class:"text-sm font-medium text-gray-900 md:text-base"},Me={key:0,class:"text-orange-600"},je={key:1,class:"text-green-600"},Ue={class:"flex items-center justify-between"},Ee={class:"text-sm font-medium text-gray-900 md:text-base"},Fe={key:0,class:"text-orange-600"},Ne={key:1,class:"text-green-600"},Oe={key:0,class:"card mt-4 p-4 md:mt-6 md:p-6"},Ve={class:"grid grid-cols-1 gap-4 md:gap-6 lg:grid-cols-2"},We={key:0,class:"rounded-lg border border-amber-200 bg-amber-50 p-3 md:p-4"},ze={class:"space-y-1 md:space-y-2"},Be={class:"break-all text-gray-800"},Je={key:1,class:"rounded-lg border border-blue-200 bg-blue-50 p-3 md:p-4"},Ye={class:"space-y-1 md:space-y-2"},He={class:"break-all text-gray-800"},Qe={__name:"LimitConfig",setup($){const n=K(),{statsData:a}=A(n),l=()=>{if(!a.value.limits.dailyCostLimit||a.value.limits.dailyCostLimit===0)return 0;const c=a.value.limits.currentDailyCost/a.value.limits.dailyCostLimit*100;return Math.min(c,100)},p=()=>{const c=l();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-green-500"};return(c,e)=>(m(),d("div",null,[t("div",_e,[e[12]||(e[12]=t("h3",{class:"mb-3 flex items-center text-lg font-bold text-gray-900 md:mb-4 md:text-xl"},[t("i",{class:"fas fa-shield-alt mr-2 text-sm text-red-500 md:mr-3 md:text-base"}),f(" 限制配置 ")],-1)),t("div",we,[t("div",null,[t("div",he,[e[1]||(e[1]=t("span",{class:"text-sm font-medium text-gray-600 md:text-base"},"每日费用限制",-1)),t("span",$e,[s(a).limits.dailyCostLimit>0?(m(),d("span",ke," $"+r(s(a).limits.currentDailyCost.toFixed(4))+" / $"+r(s(a).limits.dailyCostLimit.toFixed(2)),1)):(m(),d("span",Se,[f(" $"+r(s(a).limits.currentDailyCost.toFixed(4))+" / ",1),e[0]||(e[0]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),s(a).limits.dailyCostLimit>0?(m(),d("div",Te,[t("div",{class:I(["h-2 rounded-full transition-all duration-300",p()]),style:Z({width:l()+"%"})},null,6)])):(m(),d("div",Ce,e[2]||(e[2]=[t("div",{class:"h-2 rounded-full bg-green-500",style:{width:"0%"}},null,-1)])))]),s(a).limits.rateLimitWindow>0&&(s(a).limits.rateLimitRequests>0||s(a).limits.tokenLimit>0)?(m(),d("div",Le,[S(rt,{"current-requests":s(a).limits.currentWindowRequests,"current-tokens":s(a).limits.currentWindowTokens,label:"时间窗口限制","rate-limit-window":s(a).limits.rateLimitWindow,"request-limit":s(a).limits.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":s(a).limits.tokenLimit,"window-end-time":s(a).limits.windowEndTime,"window-remaining-seconds":s(a).limits.windowRemainingSeconds,"window-start-time":s(a).limits.windowStartTime},null,8,["current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"]),e[3]||(e[3]=t("div",{class:"mt-2 text-xs text-gray-500"},[t("i",{class:"fas fa-info-circle mr-1"}),f(' 请求次数和Token使用量为"或"的关系,任一达到限制即触发限流 ')],-1))])):T("",!0),t("div",Ie,[t("div",De,[e[5]||(e[5]=t("span",{class:"text-sm text-gray-600 md:text-base"},"并发限制",-1)),t("span",Pe,[s(a).limits.concurrencyLimit>0?(m(),d("span",Ae,r(s(a).limits.concurrencyLimit),1)):(m(),d("span",qe,e[4]||(e[4]=[t("i",{class:"fas fa-infinity text-gray-400"},null,-1)])))])]),t("div",Ke,[e[8]||(e[8]=t("span",{class:"text-sm text-gray-600 md:text-base"},"模型限制",-1)),t("span",Re,[s(a).restrictions.enableModelRestriction&&s(a).restrictions.restrictedModels.length>0?(m(),d("span",Me,[e[6]||(e[6]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),f(" 限制 "+r(s(a).restrictions.restrictedModels.length)+" 个模型 ",1)])):(m(),d("span",je,e[7]||(e[7]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),f(" 允许所有模型 ",-1)])))])]),t("div",Ue,[e[11]||(e[11]=t("span",{class:"text-sm text-gray-600 md:text-base"},"客户端限制",-1)),t("span",Ee,[s(a).restrictions.enableClientRestriction&&s(a).restrictions.allowedClients.length>0?(m(),d("span",Fe,[e[9]||(e[9]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),f(" 限制 "+r(s(a).restrictions.allowedClients.length)+" 个客户端 ",1)])):(m(),d("span",Ne,e[10]||(e[10]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),f(" 允许所有客户端 ",-1)])))])])])])]),s(a).restrictions.enableModelRestriction&&s(a).restrictions.restrictedModels.length>0||s(a).restrictions.enableClientRestriction&&s(a).restrictions.allowedClients.length>0?(m(),d("div",Oe,[e[19]||(e[19]=t("h3",{class:"mb-3 flex items-center text-lg font-bold text-gray-900 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"}),f(" 详细限制信息 ")],-1)),t("div",Ve,[s(a).restrictions.enableModelRestriction&&s(a).restrictions.restrictedModels.length>0?(m(),d("div",We,[e[14]||(e[14]=t("h4",{class:"mb-2 flex items-center text-sm font-bold text-amber-800 md:mb-3 md:text-base"},[t("i",{class:"fas fa-robot mr-1 text-xs md:mr-2 md:text-sm"}),f(" 受限模型列表 ")],-1)),t("div",ze,[(m(!0),d(N,null,O(s(a).restrictions.restrictedModels,o=>(m(),d("div",{key:o,class:"rounded border border-amber-200 bg-white px-2 py-1 text-xs md:px-3 md:py-2 md:text-sm"},[e[13]||(e[13]=t("i",{class:"fas fa-ban mr-1 text-xs text-red-500 md:mr-2"},null,-1)),t("span",Be,r(o),1)]))),128))]),e[15]||(e[15]=t("p",{class:"mt-2 text-xs text-amber-700 md:mt-3"},[t("i",{class:"fas fa-info-circle mr-1"}),f(" 此 API Key 不能访问以上列出的模型 ")],-1))])):T("",!0),s(a).restrictions.enableClientRestriction&&s(a).restrictions.allowedClients.length>0?(m(),d("div",Je,[e[17]||(e[17]=t("h4",{class:"mb-2 flex items-center text-sm font-bold text-blue-800 md:mb-3 md:text-base"},[t("i",{class:"fas fa-desktop mr-1 text-xs md:mr-2 md:text-sm"}),f(" 允许的客户端 ")],-1)),t("div",Ye,[(m(!0),d(N,null,O(s(a).restrictions.allowedClients,o=>(m(),d("div",{key:o,class:"rounded border border-blue-200 bg-white px-2 py-1 text-xs md:px-3 md:py-2 md:text-sm"},[e[16]||(e[16]=t("i",{class:"fas fa-check mr-1 text-xs text-green-500 md:mr-2"},null,-1)),t("span",He,r(o),1)]))),128))]),e[18]||(e[18]=t("p",{class:"mt-2 text-xs text-blue-700 md:mt-3"},[t("i",{class:"fas fa-info-circle mr-1"}),f(" 此 API Key 只能被以上列出的客户端使用 ")],-1))])):T("",!0)])])):T("",!0)]))}},Ge=q(Qe,[["__scopeId","data-v-f10d435d"]]),Xe={class:"card p-4 md:p-6"},Ze={class:"mb-4 md:mb-6"},ts={class:"flex flex-col text-lg font-bold text-gray-900 sm:flex-row sm:items-center md:text-xl"},es={class:"text-xs font-normal text-gray-600 sm:ml-2 md:text-sm"},ss={key:0,class:"py-6 text-center md:py-8"},as={key:1,class:"space-y-3 md:space-y-4"},is={class:"mb-2 flex items-start justify-between md:mb-3"},os={class:"min-w-0 flex-1"},ls={class:"break-all text-base font-bold text-gray-900 md:text-lg"},ns={class:"text-xs text-gray-600 md:text-sm"},rs={class:"ml-3 flex-shrink-0 text-right"},ds={class:"text-base font-bold text-green-600 md:text-lg"},ms={class:"grid grid-cols-2 gap-2 text-xs md:grid-cols-4 md:gap-3 md:text-sm"},cs={class:"rounded bg-gray-50 p-2"},xs={class:"font-medium text-gray-900"},us={class:"rounded bg-gray-50 p-2"},fs={class:"font-medium text-gray-900"},ps={class:"rounded bg-gray-50 p-2"},ys={class:"font-medium text-gray-900"},gs={class:"rounded bg-gray-50 p-2"},bs={class:"font-medium text-gray-900"},vs={key:2,class:"py-6 text-center text-gray-500 md:py-8"},_s={class:"text-sm md:text-base"},ws={__name:"ModelUsageStats",setup($){const n=K(),{statsPeriod:a,modelStats:l,modelStatsLoading:p}=A(n),c=e=>(typeof e!="number"&&(e=parseInt(e)||0),e===0?"0":e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(1)+"K":e.toLocaleString());return(e,o)=>(m(),d("div",Xe,[t("div",Ze,[t("h3",ts,[o[0]||(o[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"}),f(" 模型使用统计 ")],-1)),t("span",es,"("+r(s(a)==="daily"?"今日":"本月")+")",1)])]),s(p)?(m(),d("div",ss,o[1]||(o[1]=[t("i",{class:"fas fa-spinner loading-spinner mb-2 text-xl text-gray-600 md:text-2xl"},null,-1),t("p",{class:"text-sm text-gray-600 md:text-base"},"加载模型统计数据中...",-1)]))):s(l).length>0?(m(),d("div",as,[(m(!0),d(N,null,O(s(l),(b,v)=>{var w;return m(),d("div",{key:v,class:"model-usage-item"},[t("div",is,[t("div",os,[t("h4",ls,r(b.model),1),t("p",ns,r(b.requests)+" 次请求",1)]),t("div",rs,[t("div",ds,r(((w=b.formatted)==null?void 0:w.total)||"$0.000000"),1),o[2]||(o[2]=t("div",{class:"text-xs text-gray-600 md:text-sm"},"总费用",-1))])]),t("div",ms,[t("div",cs,[o[3]||(o[3]=t("div",{class:"text-gray-600"},"输入 Token",-1)),t("div",xs,r(c(b.inputTokens)),1)]),t("div",us,[o[4]||(o[4]=t("div",{class:"text-gray-600"},"输出 Token",-1)),t("div",fs,r(c(b.outputTokens)),1)]),t("div",ps,[o[5]||(o[5]=t("div",{class:"text-gray-600"},"缓存创建",-1)),t("div",ys,r(c(b.cacheCreateTokens)),1)]),t("div",gs,[o[6]||(o[6]=t("div",{class:"text-gray-600"},"缓存读取",-1)),t("div",bs,r(c(b.cacheReadTokens)),1)])])])}),128))])):(m(),d("div",vs,[o[7]||(o[7]=t("i",{class:"fas fa-chart-pie mb-3 text-2xl md:text-3xl"},null,-1)),t("p",_s," 暂无"+r(s(a)==="daily"?"今日":"本月")+"模型使用数据 ",1)]))]))}},hs=q(ws,[["__scopeId","data-v-2642bfd1"]]),$s={class:"gradient-bg min-h-screen p-4 md:p-6"},ks={class:"glass-strong mb-6 rounded-3xl p-4 shadow-xl md:mb-8 md:p-6"},Ss={class:"flex flex-col items-center justify-between gap-4 md:flex-row"},Ts={class:"flex items-center gap-3"},Cs={class:"mb-6 md:mb-8"},Ls={class:"flex justify-center"},Is={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"},Ds={key:0,class:"tab-content"},Ps={key:0,class:"mb-6 md:mb-8"},As={class:"rounded-xl border border-red-500/30 bg-red-500/20 p-3 text-sm text-red-800 backdrop-blur-sm md:p-4 md:text-base"},qs={key:1,class:"fade-in"},Ks={class:"glass-strong rounded-3xl p-4 shadow-xl md:p-6"},Rs={class:"mb-4 border-b border-gray-200 pb-4 md:mb-6 md:pb-6"},Ms={class:"flex flex-col items-start justify-between gap-3 md:flex-row md:items-center md:gap-4"},js={class:"flex w-full gap-2 md:w-auto"},Us=["disabled"],Es=["disabled"],Fs={class:"mb-6 grid grid-cols-1 gap-4 md:mb-8 md:gap-6 lg:grid-cols-2"},Ns={key:1,class:"tab-content"},Os={class:"glass-strong rounded-3xl shadow-xl"},Vs={__name:"ApiStatsView",setup($){const n=et(),a=K(),l=h("stats"),{apiKey:p,apiId:c,loading:e,modelStatsLoading:o,oemLoading:b,error:v,statsPeriod:w,statsData:u,oemSettings:x}=A(a),{queryStats:U,switchPeriod:C,loadStatsWithApiId:R,loadOemSettings:D,reset:M}=a,E=_=>{(_.ctrlKey||_.metaKey)&&_.key==="Enter"&&(!e.value&&p.value.trim()&&U(),_.preventDefault()),_.key==="Escape"&&M()};return tt(()=>{console.log("API Stats Page loaded"),D();const _=n.query.apiId,y=n.query.apiKey;_&&_.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)?(c.value=_,R()):y&&y.length>10&&(p.value=y),document.addEventListener("keydown",E)}),st(()=>{document.removeEventListener("keydown",E)}),at(p,_=>{_||a.clearData()}),(_,y)=>{const F=ot("router-link");return m(),d("div",$s,[t("div",ks,[t("div",Ss,[S(lt,{loading:s(b),"logo-src":s(x).siteIconData||s(x).siteIcon,subtitle:l.value==="stats"?"API Key 使用统计":"使用教程",title:s(x).siteName},null,8,["loading","logo-src","subtitle","title"]),t("div",Ts,[S(F,{class:"admin-button flex items-center gap-2 rounded-xl px-3 py-2 text-white transition-all duration-300 md:px-4 md:py-2",to:"/dashboard"},{default:it(()=>y[4]||(y[4]=[t("i",{class:"fas fa-cog text-sm"},null,-1),t("span",{class:"text-xs font-medium md:text-sm"},"管理后台",-1)])),_:1,__:[4]})])])]),t("div",Cs,[t("div",Ls,[t("div",Is,[t("button",{class:I(["tab-pill-button",l.value==="stats"?"active":""]),onClick:y[0]||(y[0]=j=>l.value="stats")},y[5]||(y[5]=[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:I(["tab-pill-button",l.value==="tutorial"?"active":""]),onClick:y[1]||(y[1]=j=>l.value="tutorial")},y[6]||(y[6]=[t("i",{class:"fas fa-graduation-cap mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"使用教程",-1)]),2)])])]),l.value==="stats"?(m(),d("div",Ds,[S(wt),s(v)?(m(),d("div",Ps,[t("div",As,[y[7]||(y[7]=t("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),f(" "+r(s(v)),1)])])):T("",!0),s(u)?(m(),d("div",qs,[t("div",Ks,[t("div",Rs,[t("div",Ms,[y[10]||(y[10]=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 md:text-lg"},"统计时间范围")],-1)),t("div",js,[t("button",{class:I(["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:s(w)==="daily"}]]),disabled:s(e)||s(o),onClick:y[2]||(y[2]=j=>s(C)("daily"))},y[8]||(y[8]=[t("i",{class:"fas fa-calendar-day text-xs md:text-sm"},null,-1),f(" 今日 ",-1)]),10,Us),t("button",{class:I(["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:s(w)==="monthly"}]]),disabled:s(e)||s(o),onClick:y[3]||(y[3]=j=>s(C)("monthly"))},y[9]||(y[9]=[t("i",{class:"fas fa-calendar-alt text-xs md:text-sm"},null,-1),f(" 本月 ",-1)]),10,Es)])])]),S(ee),t("div",Fs,[S(ve),S(Ge)]),S(hs)])])):T("",!0)])):T("",!0),l.value==="tutorial"?(m(),d("div",Ns,[t("div",Os,[S(dt)])])):T("",!0)])}}},Gs=q(Vs,[["__scopeId","data-v-2e82b81d"]]);export{Gs as default};