PageSourceSearch

https://www.trustoken.ai/assets/index-CvYQXqYv.js

js trustoken.ai collected 2026-10-05 14:40:47 UTC 8,629 bytes, 1 lines download raw bytes

1import{u as fe,a as ge,U as be,t as w,m as Q,r as M,b as h,j as e,C as K,B as je,c as C,A as V,s as z,d as ve,e as G,q as _e}from"./main-BwlQzZ10.js";import{r as n}from"./react-core-BbAAKJJM.js";import{V as H}from"./visactor-B3hATS5j.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./tools-BOMU0Mlc.js";import"./react-components-DQJhV71o.js";import"./tt-notice-CRDCEwqI.js";import"./i18n-BkF5Ubg2.js";const I=({quota:y})=>{const s=h(y,0),F=h(y),f=s!==F;return e.jsx("span",{className:f?"tooltip tooltip-top cursor-help":void 0,"data-tip":f?F:void 0,"aria-label":f?F:void 0,children:s})},Ee=y=>{const{t:s}=fe(),f=ge()==="dark"?"dark":"light";let j=new Date;const[T,J]=n.useContext(be),[O,X]=n.useState({token_name:"",start_timestamp:localStorage.getItem("data_export_default_time")==="hour"?w(j.getTime()/1e3-86400):localStorage.getItem("data_export_default_time")==="week"?w(j.getTime()/1e3-86400*30):w(j.getTime()/1e3-86400*7),end_timestamp:w(j.getTime()/1e3),data_export_default_time:""}),{start_timestamp:E,end_timestamp:B}=O,[U,R]=n.useState(!1),[v,L]=n.useState("usage"),[ke,Y]=n.useState([]),[P,Z]=n.useState(0),[A,ee]=n.useState(0),[g,te]=n.useState(localStorage.getItem("data_export_default_time")||"hour"),[ae,se]=n.useState([{type:"null",value:"0"}]),[oe,ue]=n.useState([]),[le,ne]=n.useState({type:"pie",data:[{id:"id0",values:ae}],outerRadius:.8,innerRadius:.5,padAngle:.6,valueField:"value",categoryField:"type",pie:{style:{cornerRadius:10},state:{hover:{outerRadius:.85,stroke:"#000",lineWidth:1},selected:{outerRadius:.85,stroke:"#000",lineWidth:1}}},title:{visible:!0,text:s("模型调用次数占比"),subtext:`${s("总计")}:${M(A)}`},legends:{visible:!0,orient:"left"},label:{visible:!0},tooltip:{mark:{content:[{key:t=>t.type,value:t=>M(t.value)}]}},color:{specified:Q}}),[ie,re]=n.useState({type:"bar",data:[{id:"barData",values:oe}],xField:"Time",yField:"Usage",seriesField:"Model",stack:!0,legends:{visible:!0,selectMode:"single"},title:{visible:!0,text:s("模型消耗分布"),subtext:`${s("总计")}:${h(P,2)}`},bar:{state:{hover:{stroke:"#000",lineWidth:1}}},tooltip:{mark:{content:[{key:t=>t.Model,value:t=>h(t.rawQuota||0,4)}]},dimension:{content:[{key:t=>t.Model,value:t=>t.rawQuota||0}],updateContent:t=>{t.sort((u,i)=>i.value-u.value);let l=0;for(let u=0;u<t.length;u++){if(t[u].key=="其他")continue;let i=parseFloat(t[u].value);isNaN(i)&&(i=0),t[u].datum&&t[u].datum.TimeSum&&(l=t[u].datum.TimeSum),t[u].value=h(i,4)}return t.unshift({key:s("总计"),value:h(l,4)}),t}}},color:{specified:Q}}),[de,ce]=n.useState({}),q=(t,l)=>{if(l==="data_export_default_time"){te(t);return}X(u=>({...u,[l]:t}))},W=async()=>{R(!0);try{let t=Date.parse(E)/1e3,l=Date.parse(B)/1e3;const u=`/api/data/self/?start_timestamp=${t}&end_timestamp=${l}&default_time=${g}`,i=await V.get(u),{success:_,message:k,data:c}=i.data;_?(Y(c),c.length===0&&c.push({count:0,model_name:s("无数据"),quota:0,created_at:j.getTime()/1e3}),c.sort((b,d)=>b.created_at-d.created_at),xe(c)):z(k)}finally{R(!1)}},me=async()=>{await W()},pe=async()=>{await W()},xe=t=>{let l=[],u=[],i=0,_=0,k=new Set,c=0;t.forEach(a=>{k.add(a.model_name),c+=a.token_used,i+=a.quota,_+=a.count});const b={};Array.from(k).forEach(a=>{b[a]=Q[a]||de[a]||ve(a)}),ce(b);let d=new Map;t.forEach(a=>{const o=G(a.created_at,g),m=a.model_name,p=`${o}-${m}`;d.has(p)||d.set(p,{time:o,model:m,quota:0,count:0,token_used:0});const N=d.get(p);N.quota+=a.quota,N.count+=a.count,N.token_used+=a.token_used});let D=new Map;for(let[a,o]of d)D.has(o.model)||D.set(o.model,0),D.set(o.model,D.get(o.model)+o.count);l=Array.from(D).map(([a,o])=>({type:a,value:o}));let $=Array.from(new Set([...d.values()].map(a=>a.time)));if($.length<7){const a=Math.max(...t.map(m=>m.created_at)),o=g==="hour"?3600:g==="day"?86400:604800;$=Array.from({length:7},(m,p)=>G(a-(6-p)*o,g))}$.forEach(a=>{let o=Array.from(k).map(r=>{const x=`${a}-${r}`,S=d.get(x);return{Time:a,Model:r,rawQuota:S?.quota||0,Usage:S?.quota?_e(S.quota):0,Count:S?.count||0,TokenUsed:S?.token_used||0}});const{timeSum:m,countSum:p,tokenSum:N}=o.reduce((r,x)=>(r.timeSum+=x.rawQuota,r.countSum+=x.Count,r.tokenSum+=x.TokenUsed,r),{timeSum:0,countSum:0,tokenSum:0});o.sort((r,x)=>x.rawQuota-r.rawQuota),o=o.map(r=>({...r,TimeSum:m,CountSum:p,TokenSum:N})),u.push(...o)}),l.sort((a,o)=>o.value-a.value),u.sort((a,o)=>a.Time.localeCompare(o.Time)),ne(a=>({...a,data:[{id:"id0",values:l}],title:{...a.title,subtext:`${s("总计")}:${M(_)}`},color:{specified:b}})),re(a=>({...a,data:[{id:"barData",values:u}],title:{...a.title,subtext:`${s("总计")}:${h(i,2)}`},color:{specified:b}})),se(l),ue(u),Z(i),ee(_)},he=async()=>{let t=await V.get("/api/user/self");const{success:l,message:u,data:i}=t.data;l?J({type:"login",payload:i}):z(u)};return n.useEffect(()=>{he(),pe()},[]),e.jsxs("div",{children:[e.jsx("h1",{className:"text-xl font-semibold text-base-content",children:s("数据看板")}),e.jsxs("form",{className:"mt-3 flex flex-wrap items-end gap-3",onSubmit:t=>{t.preventDefault(),me()},children:[e.jsxs("label",{className:"form-control block w-[272px] max-md:w-full",children:[e.jsx("span",{className:"mb-2 block text-sm font-medium",children:s("起始时间")}),e.jsx(K,{includeTime:!0,value:E,ariaLabel:s("起始时间"),onChange:t=>q(t,"start_timestamp")})]}),e.jsxs("label",{className:"form-control block w-[272px] max-md:w-full",children:[e.jsx("span",{className:"mb-2 block text-sm font-medium",children:s("结束时间")}),e.jsx(K,{includeTime:!0,value:B,ariaLabel:s("结束时间"),onChange:t=>q(t,"end_timestamp")})]}),e.jsxs("label",{className:"form-control block w-44 max-md:w-full",children:[e.jsx("span",{className:"mb-2 block text-sm font-medium",children:s("时间粒度")}),e.jsxs("select",{className:"select w-full border-base-300 bg-base-200 focus:border-primary",name:"data_export_default_time",value:g,onChange:t=>q(t.target.value,"data_export_default_time"),children:[e.jsx("option",{value:"hour",children:s("小时")}),e.jsx("option",{value:"day",children:s("天")}),e.jsx("option",{value:"week",children:s("周")})]})]}),e.jsx(je,{type:"submit",loading:U,children:s("查询")})]}),e.jsxs("div",{className:"relative mt-5",children:[U&&e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center bg-base-100/70",children:e.jsx("span",{className:"loading loading-spinner loading-md"})}),e.jsxs("div",{className:"grid gap-4 lg:grid-cols-3 lg:gap-6",children:[e.jsx(C,{className:"shadow-sm",children:e.jsxs("dl",{className:"card-body grid grid-cols-3 gap-4 p-5 text-sm",children:[e.jsxs("div",{children:[e.jsx("dt",{className:"text-base-content/60",children:s("当前余额")}),e.jsx("dd",{className:"mt-1 font-medium",children:e.jsx(I,{quota:T?.user?.quota})})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-base-content/60",children:s("历史消耗")}),e.jsx("dd",{className:"mt-1 font-medium",children:e.jsx(I,{quota:T?.user?.used_quota})})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-base-content/60",children:s("请求次数")}),e.jsx("dd",{className:"mt-1 font-medium",children:T.user?.request_count})]})]})}),e.jsx(C,{className:"shadow-sm",children:e.jsxs("dl",{className:"card-body grid grid-cols-2 gap-4 p-5 text-sm",children:[e.jsxs("div",{children:[e.jsx("dt",{className:"text-base-content/60",children:s("统计额度")}),e.jsx("dd",{className:"mt-1 font-medium",children:e.jsx(I,{quota:P})})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-base-content/60",children:s("统计次数")}),e.jsx("dd",{className:"mt-1 font-medium",children:A})]})]})}),e.jsx(C,{className:"shadow-sm",children:e.jsx("dl",{className:"card-body p-5 text-sm",children:e.jsxs("div",{children:[e.jsx("dt",{className:"text-base-content/60",children:s("平均RPM")}),e.jsx("dd",{className:"mt-1 font-medium",children:(A/((Date.parse(B)-Date.parse(E))/6e4)).toFixed(3)})]})})})]}),e.jsx(C,{className:"mt-5 shadow-sm",children:e.jsxs("div",{className:"card-body p-5",children:[e.jsxs("div",{role:"tablist",className:"tabs tabs-border",children:[e.jsx("button",{type:"button",role:"tab",className:`tab ${v==="usage"?"tab-active":""}`,"aria-selected":v==="usage",onClick:()=>L("usage"),children:s("消耗分布")}),e.jsx("button",{type:"button",role:"tab",className:`tab ${v==="count"?"tab-active":""}`,"aria-selected":v==="count",onClick:()=>L("count"),children:s("调用次数分布")})]}),v==="usage"?e.jsx("div",{className:"h-[500px]",children:e.jsx(H,{spec:{...ie,theme:f},option:{mode:"desktop-browser"}})}):e.jsx("div",{className:"h-[500px]",children:e.jsx(H,{spec:{...le,theme:f},option:{mode:"desktop-browser"}})})]})})]})]})};export{Ee as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.