Files
projectAIpopular/gateway/static/assets/ProxyView-BLQA9Gut.js
T

1 line
4.9 KiB
JavaScript

import{B as e,F as t,I as n,J as r,K as i,L as a,M as o,N as s,P as c,Q as l,R as u,T as d,U as f,V as p,W as m,X as h,d as g,f as _,g as v,r as y,t as b,u as x,z as S}from"./index-C3pjQqOl.js";var C={class:`proxy-view`},ee={key:0,class:`error`},te={key:1,class:`card-grid`},w={class:`metric-card highlight`},T={class:`kv-list`},E={class:`metric-card`},D={class:`kv-list`},O={key:0,class:`metric-card`},k={class:`kv-list`},A={class:`metric-card`},j={class:`issue-row`},M=[`disabled`],N=[`disabled`],P={key:0,class:`issued`},F={key:1,class:`tbl`},I=[`onClick`],L=[`onClick`],R={key:2,class:`hint`},z={class:`metric-card`},ne={key:0,class:`tbl`},B={class:`mono`},V={class:`mono`},H={key:1,class:`hint`},U=b(e({__name:`ProxyView`,setup(e){let b=r(null),U=r([]),W=r([]),G=r(0),K=r(``),q=r(`1`),J=r(``),Y=r(``),X=t(()=>{let e=b.value?.by_bucket||{};return Object.entries(e).map(([e,t])=>({name:e,...t}))});function Z(e){return(e*100).toFixed(1)+`%`}function re(e){let t=new Date(e*1e3);return`${t.getMonth()+1}/${t.getDate()} ${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}async function Q(){Y.value=``;try{let[e,t,n]=await Promise.all([g(),x(0,50,0),v()]);b.value=e,U.value=t,W.value=n}catch(e){Y.value=e?.response?.data?.detail||e?.message||String(e)}}async function ie(){if(K.value.trim())try{let e=await y(K.value.trim(),Number(q.value)||0);G.value=e.student_id||0,K.value=``,J.value=``,await Q()}catch(e){Y.value=e?.message||String(e)}}async function $(){if(G.value)try{let e=await _(G.value);J.value=e.key,await Q()}catch(e){Y.value=e?.response?.data?.detail||e?.message||String(e)}}async function ae(){if(G.value)try{await d(G.value,1),await Q()}catch(e){Y.value=e?.message||String(e)}}return p(Q),(e,t)=>(f(),u(`div`,C,[t[18]||=n(`header`,{class:`page-head`},[n(`h2`,null,`🏷️ 校园代理管理`),n(`p`,{class:`sub`},`学生 key / 用量流水 / 命中率-毛利看板(毫元计费,1 元 = 1000 毫元)`)],-1),Y.value?(f(),u(`div`,ee,l(Y.value),1)):a(``,!0),b.value?(f(),u(`div`,te,[n(`div`,w,[t[5]||=n(`h3`,null,`缓存命中率`,-1),n(`div`,T,[t[2]||=n(`span`,null,`网关直答 h_g`,-1),n(`b`,null,l(Z(b.value.h_g)),1),t[3]||=n(`span`,null,`上游前缀 h_p`,-1),n(`b`,null,l(Z(b.value.h_p)),1),t[4]||=n(`span`,null,`综合(近似)`,-1),n(`b`,null,l(Z(b.value.h_g+b.value.h_p)),1)]),t[6]||=n(`p`,{class:`hint`},`北极星:h = h_g + h_p;目标 ≥50%`,-1)]),n(`div`,E,[t[11]||=n(`h3`,null,`毛利(毫元)`,-1),n(`div`,D,[t[7]||=n(`span`,null,`收入 Σcharged`,-1),n(`b`,null,l(b.value.revenue_milli),1),t[8]||=n(`span`,null,`成本 Σcost`,-1),n(`b`,null,l(b.value.cost_milli),1),t[9]||=n(`span`,null,`毛利`,-1),n(`b`,{class:h(b.value.margin_milli>=0?`pos`:`neg`)},l(b.value.margin_milli),3),t[10]||=n(`span`,null,`请求数`,-1),n(`b`,null,l(b.value.requests),1)])]),X.value.length?(f(),u(`div`,O,[t[12]||=n(`h3`,null,`分桶`,-1),n(`div`,k,[(f(!0),u(c,null,m(X.value,e=>(f(),u(c,{key:e.name},[n(`span`,null,l(e.name),1),n(`b`,null,l(e.requests)+` 次 / `+l(e.revenue_milli)+` 毫元`,1)],64))),128))])])):a(``,!0)])):a(``,!0),n(`div`,A,[t[15]||=n(`h3`,null,`学生与 Key 管理`,-1),n(`div`,j,[i(n(`input`,{"onUpdate:modelValue":t[0]||=e=>K.value=e,placeholder:`学生姓名`,class:`sm`},null,512),[[o,K.value]]),i(n(`input`,{"onUpdate:modelValue":t[1]||=e=>q.value=e,placeholder:`初始余额(元)`,class:`sm num`},null,512),[[o,q.value]]),n(`button`,{class:`btn`,onClick:ie},`建学生`),n(`button`,{class:`btn`,disabled:!G.value,onClick:$},`签发 Key`,8,M),n(`button`,{class:`btn`,disabled:!G.value,onClick:ae},`充值 1 元`,8,N)]),J.value?(f(),u(`div`,P,[t[13]||=S(` ⚠️ 新 key(仅显示一次,请复制): `,-1),n(`code`,null,l(J.value),1)])):a(``,!0),W.value.length?(f(),u(`table`,F,[t[14]||=n(`thead`,null,[n(`tr`,null,[n(`th`,null,`ID`),n(`th`,null,`姓名`),n(`th`,null,`余额(毫元)`),n(`th`,null,`状态`),n(`th`,null,`操作`)])],-1),n(`tbody`,null,[(f(!0),u(c,null,m(W.value,e=>(f(),u(`tr`,{key:e.id,class:h({sel:e.id===G.value}),onClick:t=>G.value=e.id},[n(`td`,null,l(e.id),1),n(`td`,null,l(e.name),1),n(`td`,null,l(e.balance_milli),1),n(`td`,null,l(e.status),1),n(`td`,null,[n(`button`,{class:`mini`,onClick:s(t=>{G.value=e.id,$()},[`stop`])},`签发`,8,L)])],10,I))),128))])])):(f(),u(`p`,R,`暂无学生(后端列表接口待补时,可用上方"建学生"先创建)`))]),n(`div`,z,[t[17]||=n(`h3`,null,`用量流水`,-1),U.value.length?(f(),u(`table`,ne,[t[16]||=n(`thead`,null,[n(`tr`,null,[n(`th`,null,`时间`),n(`th`,null,`模型`),n(`th`,null,`状态`),n(`th`,null,`收入`),n(`th`,null,`成本`),n(`th`,null,`毛利`)])],-1),n(`tbody`,null,[(f(!0),u(c,null,m(U.value,e=>(f(),u(`tr`,{key:e.request_id},[n(`td`,B,l(re(e.ts)),1),n(`td`,V,l(e.model),1),n(`td`,null,[n(`span`,{class:h([`st`,e.status])},l(e.status),3)]),n(`td`,null,l(e.charged_milli),1),n(`td`,null,l(e.upstream_cost_milli),1),n(`td`,null,l(e.margin_milli),1)]))),128))])])):(f(),u(`p`,H,`暂无流水`))])]))}}),[[`__scopeId`,`data-v-42979962`]]);export{U as default};