PageSourceSearch

https://heytoken.cloud/assets/index-_69kL5Tu.js

js heytoken.cloud collected 2026-10-02 01:19:48 UTC 22,190 bytes, 1 lines download raw bytes

1import{j as e,T as Y,S as M,B as _,a as O,b as T,r as x,c as N,M as H,F as R,d as K,e as E,A as X,f as Q,R as Z}from"./semi-BbIJWxJ9.js";import{E as B}from"./charts-JNJD7dUW.js";import{R as ee,P as te,a as U,b as se,L as ne,C as ae,U as V,c as re,K as J,A as ie,S as oe,D as le,d as de,e as ce,f as ue}from"./icons-CYc28kN-.js";(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const n of o.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&r(n)}).observe(document,{childList:!0,subtree:!0});function i(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(s){if(s.ep)return;s.ep=!0;const o=i(s);fetch(s.href,o)}})();let z="";const A=t=>{z=t},b=t=>{if(!t)return"";const a=new URLSearchParams;Object.entries(t).forEach(([r,s])=>s&&a.set(r,s));const i=a.toString();return i?`?${i}`:""};async function j(t,a){const i=new Headers(a?.headers);a?.body&&i.set("Content-Type","application/json"),a?.method&&!["GET","HEAD"].includes(a.method.toUpperCase())&&z&&i.set("X-CSRF-Token",z);const r=await fetch(t,{...a,headers:i,credentials:"same-origin"});if(r.status===204)return;const s=await r.json().catch(()=>({}));if(!r.ok){const o=new Error(s.message||"请求失败");throw o.status=r.status,o.code=s.code,o}return s}const m={login:(t,a)=>j("/admin/api/v1/session",{method:"POST",body:JSON.stringify({username:t,password:a})}),session:()=>j("/admin/api/v1/session"),logout:()=>j("/admin/api/v1/session",{method:"DELETE"}),meta:()=>j("/admin/api/v1/meta"),overview:t=>j(`/admin/api/v1/stats/overview${b(t)}`),sourceStats:t=>j(`/admin/api/v1/stats/sources${b(t)}`),users:t=>j(`/admin/api/v1/users${b(t)}`),topups:t=>j(`/admin/api/v1/topups${b(t)}`),apiKeys:t=>j(`/admin/api/v1/api-keys${b(t)}`),operations:t=>j(`/admin/api/v1/operations${b(t)}`),auditLogs:t=>j(`/admin/api/v1/audit-logs${b(t)}`),sources:t=>j(`/admin/api/v1/sources${b(t)}`),createSource:t=>j("/admin/api/v1/sources",{method:"POST",body:JSON.stringify(t)}),updateSource:t=>j(`/admin/api/v1/sources/${t.id}`,{method:"PATCH",body:JSON.stringify({client_id:t.client_id,code:t.code,name:t.name,category:t.category,enabled:t.enabled,created_at:t.created_at})}),retryOperation:t=>j(`/admin/api/v1/operations/${t}/retry`,{method:"POST"})},w=(t,a="USD")=>new Intl.NumberFormat("zh-CN",{style:"currency",currency:a,minimumFractionDigits:2}).format(t/100),F=t=>new Intl.NumberFormat("zh-CN",{notation:"compact",maximumFractionDigits:1}).format(t),P=t=>t?new Intl.DateTimeFormat("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(new Date(t)):"-",xe={active:"green",succeeded:"green",accepted:"green",enabled:"green",disabled:"grey",refunded:"orange",retryable_failed:"orange",retry_requested:"blue",processing:"blue",received:"blue",needs_review:"red",failed:"red"};function L({value:t}){return e.jsx(Y,{color:xe[t]||"grey",size:"small",children:t.replaceAll("_"," ")})}function f({title:t,meta:a,actions:i}){return e.jsxs("div",{className:"page-header",children:[e.jsxs("div",{children:[e.jsx("h1",{children:t}),a&&e.jsx("div",{className:"page-meta",children:a})]}),e.jsx("div",{className:"page-actions",children:i})]})}function $({filters:t,sources:a,onChange:i,onRefresh:r}){const s=[...new Set(a.map(n=>n.client_id))].map(n=>({value:n,label:n})),o=a.filter(n=>!t.client_id||n.client_id===t.client_id).map(n=>({value:n.code,label:n.name}));return e.jsxs("div",{className:"filter-bar",children:[e.jsxs("label",{children:[e.jsx("span",{children:"开始日期"}),e.jsx("input",{type:"date",value:t.from,onChange:n=>i({...t,from:n.target.value})})]}),e.jsxs("label",{children:[e.jsx("span",{children:"结束日期"}),e.jsx("input",{type:"date",value:t.to,onChange:n=>i({...t,to:n.target.value})})]}),e.jsxs("label",{children:[e.jsx("span",{children:"调用方"}),e.jsx(O,{value:t.client_id||void 0,placeholder:"全部",optionList:s,showClear:!0,onChange:n=>i({...t,client_id:String(n||""),source:""})})]}),e.jsxs("label",{children:[e.jsx("span",{children:"来源"}),e.jsx(O,{value:t.source||void 0,placeholder:"全部",optionList:o,showClear:!0,onChange:n=>i({...t,source:String(n||"")})})]}),e.jsxs("label",{children:[e.jsx("span",{children:"币种"}),e.jsx(O,{value:t.currency,optionList:[{value:"USD",label:"USD"},{value:"CNY",label:"CNY"}],onChange:n=>i({...t,currency:String(n)})})]}),e.jsx(T,{content:"刷新数据",children:e.jsx(_,{className:"refresh-button",theme:"borderless",icon:e.jsx(ee,{size:17}),onClick:r,"aria-label":"刷新数据"})})]})}function C({label:t,metric:a,value:i,tone:r="default",format:s=F}){const o=a?.value??i??0;return e.jsxs("div",{className:`metric-cell tone-${r}`,children:[e.jsx("div",{className:"metric-label",children:t}),e.jsx("div",{className:"metric-value",children:s(o)}),a&&e.jsxs("div",{className:`metric-change ${a.change_ratio>=0?"positive":"negative"}`,children:[a.change_ratio>=0?"+":"",(a.change_ratio*100).toFixed(1),"%"]})]})}function S(){return e.jsx("div",{className:"loading-block",children:e.jsx(M,{size:"large"})})}function I({onRetry:t}){return e.jsxs("div",{className:"error-block",children:[e.jsx("span",{children:"数据加载失败"}),e.jsx(_,{onClick:t,children:"重试"})]})}function v(t,a,i){const[r,s]=x.useState(),[o,n]=x.useState(!0),[l,p]=x.useState(!1),[u,d]=x.useState(0),h=x.useCallback(()=>d(y=>y+1),[]);return x.useEffect(()=>{let y=!0;return n(!0),p(!1),t().then(g=>{y&&s(g)}).catch(g=>{y&&(g.status===401?i():p(!0))}).finally(()=>{y&&n(!1)}),()=>{y=!1}},[...a,u]),{value:r,loading:o,error:l,reload:h}}const k={pagination:!1,size:"small",className:"data-table"};function he({filters:t,setFilters:a,sources:i,onUnauthorized:r}){const s=v(()=>m.overview(t),[t],r),o=v(()=>m.sourceStats(t),[t],r);if(s.loading&&!s.value)return e.jsx(S,{});if(s.error||!s.value)return e.jsx(I,{onRetry:s.reload});const n=s.value,l={animationDuration:350,tooltip:{trigger:"axis"},legend:{data:["新增用户","净收入"],top:0,right:4,textStyle:{color:"#5f6977"}},grid:{left:42,right:48,top:42,bottom:26},xAxis:{type:"category",data:n.trend.map(u=>
1u.date.slice(5)),boundaryGap:!1,axisLine:{lineStyle:{color:"#dce1e8"}},axisLabel:{color:"#7a8492"}},yAxis:[{type:"value",splitLine:{lineStyle:{color:"#edf0f4"}}},{type:"value",splitLine:{show:!1},axisLabel:{formatter:u=>`$${u/100}`}}],series:[{name:"新增用户",type:"line",smooth:!0,symbolSize:6,data:n.trend.map(u=>u.new_users),lineStyle:{color:"#1677d2",width:2},itemStyle:{color:"#1677d2"},areaStyle:{color:"rgba(22,119,210,.08)"}},{name:"净收入",type:"bar",yAxisIndex:1,barMaxWidth:18,data:n.trend.map(u=>u.net_revenue_minor),itemStyle:{color:"#2a9d68",borderRadius:[2,2,0,0]}}]},p={animationDuration:350,tooltip:{trigger:"axis",axisPointer:{type:"shadow"}},grid:{left:112,right:24,top:16,bottom:24},xAxis:{type:"value",splitLine:{lineStyle:{color:"#edf0f4"}},axisLabel:{formatter:u=>`$${u/100}`}},yAxis:{type:"category",data:(o.value?.items||[]).map(u=>u.name),axisLine:{show:!1},axisTick:{show:!1}},series:[{type:"bar",barWidth:18,data:(o.value?.items||[]).map((u,d)=>({value:u.net_amount_minor,itemStyle:{color:["#1677d2","#2a9d68","#d78b22"][d%3],borderRadius:[0,2,2,0]}}))}]};return e.jsxs(e.Fragment,{children:[e.jsx(f,{title:"概览",meta:`${t.from} 至 ${t.to}`}),e.jsx($,{filters:t,sources:i,onChange:a,onRefresh:()=>{s.reload(),o.reload()}}),e.jsxs("section",{className:"metric-strip",children:[e.jsx(C,{label:"新增用户",metric:n.new_users}),e.jsx(C,{label:"付费用户",metric:n.paying_users,tone:"green"}),e.jsx(C,{label:"净收入",metric:n.net_revenue_minor,tone:"green",format:u=>w(u,n.currency)}),e.jsx(C,{label:"成功订单",metric:n.successful_orders}),e.jsx(C,{label:"待处理操作",value:n.pending_operations,tone:"amber"}),e.jsx(C,{label:"人工复核",value:n.needs_review,tone:"red"})]}),e.jsxs("section",{className:"chart-grid",children:[e.jsxs("div",{className:"chart-section",children:[e.jsx("h2",{children:"增长与收入趋势"}),e.jsx(B,{option:l,style:{height:320}})]}),e.jsxs("div",{className:"chart-section",children:[e.jsx("h2",{children:"收入来源"}),e.jsx(B,{option:p,style:{height:320}})]})]})]})}function me({filters:t,setFilters:a,sources:i,onUnauthorized:r}){const s=v(()=>m.sourceStats(t),[t],r);if(s.loading&&!s.value)return e.jsx(S,{});if(s.error||!s.value)return e.jsx(I,{onRetry:s.reload});const o=[{title:"来源",dataIndex:"name",render:(n,l)=>e.jsxs("div",{children:[e.jsx("strong",{children:l.name}),e.jsx("div",{className:"secondary",children:l.code})]})},{title:"新增用户",dataIndex:"new_users",align:"right"},{title:"付费用户",dataIndex:"paying_users",align:"right"},{title:"转化率",dataIndex:"conversion_rate",align:"right",render:n=>`${(n*100).toFixed(1)}%`},{title:"成功订单",dataIndex:"successful_orders",align:"right"},{title:"毛收入",dataIndex:"gross_amount_minor",align:"right",render:(n,l)=>w(n,l.currency)},{title:"退款",dataIndex:"refund_amount_minor",align:"right",render:(n,l)=>w(n,l.currency)},{title:"净收入",dataIndex:"net_amount_minor",align:"right",render:(n,l)=>e.jsx("strong",{children:w(n,l.currency)})},{title:"发放额度",dataIndex:"quota_credited",align:"right",render:F}];return e.jsxs(e.Fragment,{children:[e.jsx(f,{title:"来源分析",meta:`${s.value.items.length} 个有效来源`}),e.jsx($,{filters:t,sources:i,onChange:a,onRefresh:s.reload}),e.jsx("section",{className:"table-section",children:e.jsx(N,{...k,rowKey:"code",columns:o,dataSource:s.value.items})})]})}function je({filters:t,setFilters:a,sources:i,onUnauthorized:r}){const s=v(()=>m.users(t),[t],r);if(s.loading&&!s.value)return e.jsx(S,{});if(s.error||!s.value)return e.jsx(I,{onRetry:s.reload});const o=[{title:"外部用户",dataIndex:"external_user_id",render:(n,l)=>e.jsxs("div",{children:[e.jsx("strong",{children:n}),e.jsxs("div",{className:"secondary",children:["NewAPI #",l.newapi_user_id]})]})},{title:"调用方",dataIndex:"client_id"},{title:"来源",dataIndex:"source_code"},{title:"状态",dataIndex:"status",render:n=>e.jsx(L,{value:n})},{title:"余额额度",dataIndex:"balance_quota",align:"right",render:F},{title:"累计收入",dataIndex:"lifetime_topup_minor",align:"right",render:(n,l)=>w(n,l.currency)},{title:"Keys",dataIndex:"api_key_count",align:"right"},{title:"绑定时间",dataIndex:"created_at",render:P}];return e.jsxs(e.Fragment,{children:[e.jsx(f,{title:"用户",meta:`${s.value.total} 个绑定用户`}),e.jsx($,{filters:t,sources:i,onChange:a,onRefresh:s.reload}),e.jsx("section",{className:"table-section",children:e.jsx(N,{...k,rowKey:"id",columns:o,dataSource:s.value.items})})]})}function ge({filters:t,setFilters:a,sources:i,onUnauthorized:r}){const s=v(()=>m.topups(t),[t],r);if(s.loading&&!s.value)return e.jsx(S,{});if(s.error||!s.value)return e.jsx(I,{onRetry:s.reload});const o=[{title:"订单",dataIndex:"external_order_id",render:(n,l)=>e.jsxs("div",{children:[e.jsx("strong",{children:n}),e.jsx("div",{className:"secondary",children:l.external_user_id})]})},{title:"来源",dataIndex:"source_code"},{title:"通道",dataIndex:"channel"},{title:"支付方式",dataIndex:"payment_method"},{title:"金额",dataIndex:"amount_minor",align:"right",render:(n,l)=>w(n,l.currency)},{title:"退款",dataIndex:"refund_amount_minor",align:"right",render:(n,l)=>n?w(n,l.currency):"-"},{title:"额度",dataIndex:"quota",align:"right",render:F},{title:"状态",dataIndex:"status",render:n=>e.jsx(L,{value:n})},{title:"时间",dataIndex:"created_at",render:P}];return e.jsxs(e.Fragment,{children:[e.jsx(f,{title:"收入与订单",meta:`${s.value.total} 笔记录`}),e.jsx($,{filters:t,sources:i,onChange:a,onRefresh:s.reload}),e.jsx("section",{className:"table-section",children:e.jsx(N,{...k,rowKey:"id",columns:o,dataSource:s.value.items})})]})}function pe({filters:t,setFilters:a,sources:i,onUnauthorized:r}){const s=v(()=>m.apiKeys(t),[t],r);if(s.loading&&!s.value)return e.jsx(S,{});if(s.error||!s.value)return e.jsx(I,{onRetry:s.reload});const o=[{title:"名称",dataIndex:"name",render:(n,l)=>e.jsxs("div",{children:[e.jsx("strong",{children:n}),e.jsxs("div",{className:"secondary",children:["Token #",l.newapi_token_id]})]})},{title:"外部用户",dataIndex:"external_user_id"},{title:"来源",dataIndex:"source_code"},{title:"指纹",dataIndex:"key_fingerprint",render:n=>e.jsx("code",{children:n})},{title:"状态",dataIndex:"status",render:n=>e.jsx(L,{value:n})},{title:"创建时间",dataIndex:"created_at",render:P}];return e.jsxs(e.Fragment,{children:[e.jsx(f,{title:"API Keys",meta:`${s.value.total} 个受管 Key`}),e.jsx($,{filters:t,sources:i,onChange:a,onRefresh:s.reload}),e.jsx("section",{className:"table-section",children:e.jsx(N,{...k,rowKey:"id",columns:o,dataSource:s.value.items})})]})}function ye({filters:t,sources:a,onUnauthorized:i}){const r=v(()=>m.operations(t),[t],i),s=n=>H.confirm({title:"请求安全重试",content:n.idempotency_key,okText:"加入队列",cancelText:"取消",onOk:async()=>{await m.retryOperation(n.id),E.success("已加入重试队列"),r.reload()}});if(r.loading&&!r.value)return e.jsx(S,{});if(r.error||!r.value)return e.jsx(I,{onRetry:r.reload});const o=[{title:"操作",dataIndex:"operation_type",render:(n,l)=>e.jsxs("div",{children:[e.jsx("strong",{children:n}),e.jsx("div",{className:"secondary",children:l.idempotency_key})]})},{title:"调用方",dataIndex:"client_id"},{title:"状态",dataIndex:"status",render:n=>e.jsx(L,{value:n})},{title:"尝试",dataIndex:"attempt_count",align:"right"},{title:"错误码",dataIndex:"last_error_code",render:n=>n||"-"},{title:"更新时间",dataIndex:"updated_at",render:P},{title:"",dataIndex:"action",width:52,render:(n,l)=>["retryable_failed","needs_review"].includes(l.status)?e.jsx(T,{content:"加入安全重试队列",children:e.jsx(_,{theme:"borderless",icon:e.jsx(U,{size:16}),"aria-label":"加入安全重试队列",onClick:()=>s(l)})}):null}];return e.jsxs(e.Fragment,{children:[e.jsx(f,{title:"操作队列",meta:`${r.value.total} 个近期操作`,actions:e.jsx(_,{icon:e.jsx(U,{size:16}),onClick:r.reload,children:"刷新"})}),e.jsx("section",{className:"table-section",children:e.jsx(N,{...k,rowKey:"id",columns:o,dataSource:r.value.items})})]})}function ve({filters:t,onUnauthorized:a}){const i=v(()=>m.auditLogs(t),[t],a);if(i.loading&&!i.value)return e.jsx(S,{});if(i.error||!i.value)return e.jsx(I,{onRetry:i.reload});const r=[{title:"操作者",dataIndex:"actor"},{title:"动作",dataIndex:"action"},{title:"目标",dataIndex:"target"},{title:"来源",dataIndex:"source_code",render:s=>s||"-"},{title:"结果",dataIndex:"result",render:s=>e.jsx(L,{value:s})},{title:"Request ID",dataIndex:"request_id",render:s=>e.jsx("code",{children:s})},{title:"时间",dataIndex:"created_at",render:P}];return e.jsxs(e.Fragment,{children:[e.jsx(f,{title:"审计日志",meta:`${i.value.total} 条安全事件`}),e.jsx("section",{className:"table-section",children:e.jsx(N,{...k,rowKey:"id",columns:r,dataSource:i.value.items})})]})}function fe({filters:t,onUnauthorized:a,onSourcesChanged:i}){const r=v(()=>m.sources(t),[t],a),[s,o]=x.useState(null),[n,l]=x.useState(!1),p=async()=>
1{if(!(!s?.client_id||!s.code||!s.name||!s.category)){l(!0);try{s.id?await m.updateSource(s):await m.createSource(s),E.success(s.id?"来源已更新":"来源已创建"),o(null),r.reload(),i()}finally{l(!1)}}};if(r.loading&&!r.value)return e.jsx(S,{});if(r.error||!r.value)return e.jsx(I,{onRetry:r.reload});const u=[{title:"来源",dataIndex:"name",render:(d,h)=>e.jsxs("div",{children:[e.jsx("strong",{children:d}),e.jsx("div",{className:"secondary",children:h.code})]})},{title:"调用方",dataIndex:"client_id"},{title:"类别",dataIndex:"category"},{title:"启用",dataIndex:"enabled",render:(d,h)=>e.jsx(K,{checked:d,size:"small",onChange:y=>m.updateSource({...h,enabled:y}).then(()=>{r.reload(),i()})})},{title:"更新时间",dataIndex:"updated_at",render:P},{title:"",dataIndex:"action",width:52,render:(d,h)=>e.jsx(T,{content:"编辑来源",children:e.jsx(_,{theme:"borderless",icon:e.jsx(se,{size:16}),"aria-label":"编辑来源",onClick:()=>o(h)})})}];return e.jsxs(e.Fragment,{children:[e.jsx(f,{title:"来源配置",meta:`${r.value.items.length} 个来源`,actions:e.jsx(_,{theme:"solid",icon:e.jsx(te,{size:16}),onClick:()=>o({enabled:!0,category:"partner"}),children:"新增来源"})}),e.jsx("section",{className:"table-section",children:e.jsx(N,{...k,rowKey:"id",columns:u,dataSource:r.value.items})}),e.jsx(H,{visible:!!s,title:s?.id?"编辑来源":"新增来源",okText:"保存",cancelText:"取消",confirmLoading:n,onOk:p,onCancel:()=>o(null),children:e.jsxs("div",{className:"modal-form",children:[e.jsxs("label",{children:[e.jsx("span",{children:"调用方"}),e.jsx(R,{value:s?.client_id||"",disabled:!!s?.id,onChange:d=>o(h=>({...h,client_id:d}))})]}),e.jsxs("label",{children:[e.jsx("span",{children:"来源代码"}),e.jsx(R,{value:s?.code||"",disabled:!!s?.id,onChange:d=>o(h=>({...h,code:d}))})]}),e.jsxs("label",{children:[e.jsx("span",{children:"显示名称"}),e.jsx(R,{value:s?.name||"",onChange:d=>o(h=>({...h,name:d}))})]}),e.jsxs("label",{children:[e.jsx("span",{children:"类别"}),e.jsx(O,{value:s?.category,optionList:["product","partner","direct","campaign","other"].map(d=>({value:d,label:d})),onChange:d=>o(h=>({...h,category:String(d)}))})]}),e.jsxs("label",{className:"switch-row",children:[e.jsx("span",{children:"启用"}),e.jsx(K,{checked:s?.enabled??!0,onChange:d=>o(h=>({...h,enabled:d}))})]})]})})]})}function be({meta:t}){return e.jsxs(e.Fragment,{children:[e.jsx(f,{title:"系统设置",meta:t?.demo?"Demo":t?.version}),e.jsxs("section",{className:"settings-list",children:[e.jsxs("div",{children:[e.jsx("span",{children:"服务版本"}),e.jsx("strong",{children:t?.version||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"公开监听"}),e.jsx("code",{children:t?.public_addr||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"管理监听"}),e.jsx("code",{children:t?.admin_addr||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"NewAPI"}),e.jsx("code",{children:t?.newapi_base_url||"-"})]}),e.jsxs("div",{children:[e.jsx("span",{children:"运行模式"}),e.jsx(L,{value:t?.demo?"demo":"production"})]})]})]})}const _e=[{key:"overview",label:"概览",icon:ne},{key:"sources",label:"来源分析",icon:ae},{key:"users",label:"用户",icon:V},{key:"revenue",label:"收入与订单",icon:re},{key:"keys",label:"API Keys",icon:J},{key:"operations",label:"操作队列",icon:ie},{key:"audit",label:"审计日志",icon:oe},{key:"source-config",label:"来源配置",icon:le},{key:"settings",label:"系统设置",icon:de}],q=t=>t.toISOString().slice(0,10);function Se(){const[t,a]=x.useState(),[i,r]=x.useState("overview"),[s,o]=x.useState([]),[n,l]=x.useState(),[p,u]=x.useState(0),[d,h]=x.useState(()=>{const c=new Date,D=new Date;return D.setDate(c.getDate()-29),{from:q(D),to:q(c),client_id:"",source:"",currency:"USD"}});x.useEffect(()=>{m.session().then(c=>{A(c.csrf_token),a(c)}).catch(()=>a(null))},[]),x.useEffect(()=>{t&&(m.sources().then(c=>o(c.items||[])),m.meta().then(c=>l(c)))},[t,p]);const y=()=>{A(""),a(null)},g={filters:d,setFilters:h,sources:s,onUnauthorized:y},G=x.useMemo(()=>{switch(i){case"overview":return e.jsx(he,{...g});case"sources":return e.jsx(me,{...g});case"users":return e.jsx(je,{...g});case"revenue":return e.jsx(ge,{...g});case"keys":return e.jsx(pe,{...g});case"operations":return e.jsx(ye,{...g});case"audit":return e.jsx(ve,{...g});case"source-config":return e.jsx(fe,{...g,onSourcesChanged:()=>u(c=>c+1)});case"settings":return e.jsx(be,{meta:n})}},[i,d,s,n,p]);if(t===void 0)return e.jsx("div",{className:"boot-screen",children:e.jsx(M,{size:"large"})});if(!t)return e.jsx(Ie,{onLogin:c=>{A(c.csrf_token),a(c)}});const W=async()=>{try{await m.logout()}finally{y()}};return e.jsxs("div",{className:"app-shell",children:[e.jsxs("aside",{className:"sidebar",children:[e.jsxs("div",{className:"brand",children:[e.jsx("img",{src:"/heytoken-logo.svg",alt:"HeyToken"}),e.jsxs("div",{children:[e.jsx("strong",{children:"HeyToken"}),e.jsx("span",{children:"Bridge"})]})]}),e.jsx("nav",{children:_e.map(c=>{const D=c.icon;return e.jsx(T,{content:c.label,position:"right",children:e.jsxs("button",{className:i===c.key?"active":"",onClick:()=>r(c.key),children:[e.jsx(D,{size:18}),e.jsx("span",{children:c.label}),c.key==="operations"&&e.jsx("i",{children:"3"})]})},c.key)})}),e.jsxs("div",{className:"sidebar-user",children:[e.jsx(X,{size:"small",color:"blue",children:t.username.slice(0,1).toUpperCase()}),e.jsxs("div",{children:[e.jsx("strong",{children:t.username}),e.jsx("span",{children:t.role})]}),e.jsx(T,{content:"退出登录",children:e.jsx(_,{theme:"borderless",icon:e.jsx(ce,{size:17}),"aria-label":"退出登录",onClick:W})})]})]}),e.jsx("main",{className:"main-content",children:G})]})}function Ie({onLogin:t}){const[a,i]=x.useState("admin"),[r,s]=x.useState(""),[o,n]=x.useState(!1),l=async p=>{p.preventDefault(),n(!0);try{t(await m.login(a,r))}catch{E.error("用户名或密码错误")}finally{n(!1)}};return e.jsxs("div",{className:"login-screen",children:[e.jsxs("div",{className:"login-brand",children:[e.jsx("img",{src:"/heytoken-logo.svg",alt:"HeyToken"}),e.jsxs("div",{children:[e.jsx("h1",{children:"HeyToken Bridge"}),e.jsx("span",{children:"Admin Console"})]})]}),e.jsxs("form",{className:"login-form",onSubmit:l,children:[e.jsxs("label",{children:[e.jsx("span",{children:"用户名"}),e.jsx(R,{value:a,onChange:i,autoComplete:"username",prefix:e.jsx(V,{size:16})})]}),e.jsxs("label",{children:[e.jsx("span",{children:"密码"}),e.jsx(R,{mode:"password",value:r,onChange:s,autoComplete:"current-password",prefix:e.jsx(J,{size:16})})]}),e.jsx(_,{htmlType:"submit",theme:"solid",type:"primary",block:!0,loading:o,icon:e.jsx(ue,{size:16}),children:"登录"})]})]})}Q.createRoot(document.getElementById("root")).render(e.jsx(Z.StrictMode,{children:e.jsx(Se,{})}));

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.