码桶

发现社区成员的开源项目

geekssl /

wstats

公开
main
wstats/public/assets/Realtime-CE4FqZLa.js
Realtime-CE4FqZLa.js11.7 KB
import{u as le,r as n,K as U,j as e,B as j,M as xe,N as me,g as ae,O as D,A as M,o as E,T as I,b as W,a as ue,c as je,t as ye,Q as K,h as T,l as q,k as A,C as J,w as ve,F as Q,f as B,I as ge,D as fe}from"./index-GWuvg2UH.js";import{B as be}from"./index-DihvOmSo.js";import{D as we}from"./index-DWKYNnDc.js";import{E as X}from"./index-VbOLTMR0.js";import{R as Se,a as Z}from"./index-DIHsQVbu.js";import{S as ee}from"./index-BZDftoba.js";import{T as Ne}from"./index-mZVFvfKe.js";import{S as Ce,T as se}from"./index-C23zBuz1.js";import{T as V}from"./index-BW_2QB9V.js";import{E as Te}from"./EChart-Bps-t-O3.js";import{u as Ie}from"./useVisibilityRefresh-DRH6QDT3.js";import"./IconTickCircle-BYgwCdAe.js";import"./object-DkPZvw8u.js";import"./slice-B6jKCnyX.js";import"./Animation-CU6YFe7Y.js";import"./_baseDifference-DopHgqVv.js";import"./index-BMbdBPA2.js";import"./echarts-CEICS1Jr.js";const te={pageview:"blue",perf:"green",event:"violet",click:"orange",scroll:"cyan",hb:"grey"};function o({label:t,children:p,span2:f}){return e.jsxs("div",{className:f?"sd-span2":"",children:[e.jsx("div",{className:"sd-label",children:t}),e.jsx("div",{className:"sd-value",children:p??"-"})]})}function ze({site:t,row:p,label:f,btnStyle:h}){const{t:i}=le(),[L,b]=n.useState(!1),[d,y]=n.useState(null),[w,z]=n.useState(!1),k=async()=>{if(!(!t||!p)){b(!0),z(!0),y({id:p.id});try{const r=p.live?await W.sessionDetailBySid(t.id,p.session_id):await W.sessionDetail(t.id,p.id);y(r)}catch(r){V.error(r.message),y(null)}finally{z(!1)}}},l=d==null?void 0:d.session,v=d==null?void 0:d.now,g=(d==null?void 0:d.events)||[],S=async()=>{try{await navigator.clipboard.writeText(l.session_id||""),V.success(i("copied"))}catch{V.error(i("copy"))}},O=l!=null&&l.device?U[l.device]?U[l.device].split(" / ")[0]:l.device:"-";return e.jsxs(e.Fragment,{children:[e.jsx(j,{size:"small",type:"primary",theme:"borderless",style:h,onClick:k,children:f||i("visitTrail")}),e.jsxs(Ce,{width:640,title:i("visitTrail"),visible:L,onCancel:()=>b(!1),footer:null,keepDOM:!1,children:[w&&e.jsx("div",{style:{textAlign:"center",padding:60},children:e.jsx(xe,{})}),!w&&l&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"sd-section",children:[e.jsx("div",{className:"sd-section-title",children:"访问信息"}),e.jsxs("div",{className:"sd-grid",children:[e.jsx(o,{label:i("uniqueId"),span2:!0,children:e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6,flexWrap:"wrap"},children:[e.jsx("span",{className:"sd-mono",children:l.session_id||l.visitor_id||"-"}),e.jsx(j,{size:"small",theme:"borderless",icon:e.jsx(me,{}),style:{padding:"0 4px",color:"#86909c"},onClick:S})]})}),e.jsx(o,{label:i("entryPage"),span2:!0,children:l.entry_url||"-"}),e.jsx(o,{label:i("exitPage"),span2:!0,children:l.exit_url||"-"}),e.jsx(o,{label:i("fSource"),children:l.source||"-"}),e.jsx(o,{label:i("colViews"),children:l.pageviews??0}),e.jsx(o,{label:i("colStay"),children:ae(l.duration)}),e.jsx(o,{label:i("startTs"),children:l.start_ts?D(l.start_ts):"-"}),e.jsx(o,{label:i("firstSeen"),children:M(l.start_ts,v,i)}),e.jsx(o,{label:i("lastSeen"),children:M(l.end_ts,v,i)})]})]}),e.jsxs("div",{className:"sd-section",children:[e.jsx("div",{className:"sd-section-title",children:i("visitorEnv")}),e.jsxs("div",{className:"sd-grid",children:[e.jsx(o,{label:i("colBrowser"),children:l.browser||"-"}),e.jsx(o,{label:i("colOs"),children:l.os||"-"}),e.jsx(o,{label:i("colDevice"),children:O}),e.jsx(o,{label:i("lang"),children:l.lang||"-"}),e.jsx(o,{label:i("countryRegion"),children:l.country||"-"}),e.jsx(o,{label:i("stateProvince"),children:l.province||"-"}),e.jsx(o,{label:i("cityCounty"),children:l.city||"-"}),e.jsx(o,{label:i("ip"),children:l.ip||"-"})]})]}),g.length>0&&e.jsxs("div",{className:"sd-section",children:[e.jsxs("div",{className:"sd-section-title",children:[i("behaviorLog"),"(",g.length,")"]}),e.jsx(se,{style:{maxHeight:360,overflowY:"auto"},children:g.map((r,R)=>e.jsxs(se.Item,{time:D(r.ts),color:te[r.type]||"grey",children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap",marginBottom:2},children:[e.jsx(E,{size:"small",color:te[r.type]||"grey",children:i(r.type)||r.type}),r.title&&e.jsx(I.Text,{strong:!0,children:r.title})]}),r.url&&e.jsx(I.Text,{size:"small",type:"tertiary",ellipsis:{showTitle:!0},style:{display:"block",maxWidth:480},children:r.url}),r.payload&&e.jsx("div",{style:{marginTop:4},children:Object.entries(r.payload).slice(0,20).map(([x,m])=>e.jsx(E,{size:"small",style:{margin:"0 6px 4px 0"},children:`${x}: ${typeof m=="object"?JSON.stringify(m):m}`},x))})]},R))})]}),g.length===0&&e.jsx(I.Text,{type:"tertiary",children:i("emptyEvents")})]})]})]})}const ie=5e3,_e=["direct","search","social","link","paid","utm","internal"],Pe=["desktop","mobile","tablet","bot"];function Je(){var G;const{t,lang:p}=le(),f=ue(),{site:h}=je(),[i,L]=n.useState(null),[b,d]=n.useState(!1),[y,w]=n.useState(""),[z,k]=n.useState(ie/1e3),l=n.useRef(null),[v,g]=n.useState(ye()),[S,O]=n.useState("all"),[r,R]=n.useState(""),[x,m]=n.useState({source:"",device:"",browser:""}),[N,_]=n.useState({ip:"",source:"",device:"",browser:""}),[Y,u]=n.useState(1),[$,re]=n.useState(10),F=n.useCallback(()=>({day:v,scope:S,ip:N.ip,source:N.source,device:N.device,browser:N.browser,page:String(Y),page_size:String($)}),[v,S,N,Y,$]),C=n.useCallback(async s=>{if(h){s||d(!0);try{L(await W.realtime(h.id,F())),w("")}catch(a){w(a.message)}finally{d(!1)}}},[h,F]);if(n.useEffect(()=>{if(h)return C(!1),l.current=setInterval(()=>{k(s=>s<=1?(C(!0),ie/1e3):s-1)},1e3),()=>clearInterval(l.current)},[h,C]),Ie(()=>C(!0)),!h)return e.jsx("div",{className:"page",children:e.jsx(X,{style:{marginTop:60},title:t("noSiteHint"),children:e.jsx(j,{theme:"solid",onClick:()=>f("/sites"),children:t("goSites")})})});const c=(i==null?void 0:i.today)||null,P=(i==null?void 0:i.list)||{items:[],total:0,page:1,page_size:10},ne=(i==null?void 0:i.now)||Date.now()/1e3,H=(G=c==null?void 0:c.series)!=null&&G.length?{color:["#00b42a"],tooltip:{trigger:"axis"},grid:{left:12,right:16,top:24,bottom:8,containLabel:!0},xAxis:{type:"category",boundaryGap:!1,data:c.series.map(s=>s.min),axisLabel:{color:"#86909c",interval:9}},yAxis:{type:"value",splitLine:{lineStyle:{color:"#f0f1f3"}},axisLabel:{color:"#86909c"}},series:[{type:"line",smooth:!0,symbol:"none",areaStyle:{opacity:.15},lineStyle:{width:2},data:c.series.map(s=>s.pv)}]}:null,oe=s=>{const a=q(s.country,p);return[s.city,s.province!==s.city?s.province:"",a].filter(Boolean)[0]||"-"},ce=s=>s.ref_host?s.ref_host:A(s.source)||"-",de=s=>s.online?e.jsx(E,{size:"small",color:"green",children:t("statusOnline")}):e.jsx(T,{content:s.last_ts?`${t("statusIdle")}: ${D(s.last_ts)}`:"",children:e.jsx("span",{children:e.jsx(E,{size:"small",color:"grey",children:t("rtLeft")})})}),pe=[{title:t("time"),dataIndex:"start_ts",width:"8%",render:s=>K(s*1e3).format("HH:mm:ss")},{title:t("colRegion"),dataIndex:"city",width:"10%",render:(s,a)=>e.jsx(T,{content:[a.city,a.province,q(a.country,p)].filter(Boolean).join(" / "),children:e.jsx("span",{children:oe(a)})})},{title:t("colEntryUrl"),dataIndex:"entry_url",width:"18%",ellipsis:{showTitle:!1},render:s=>e.jsx(T,{content:s,children:e.jsx("span",{style:{maxWidth:210},children:s||"-"})})},{title:t("ip"),dataIndex:"ip",width:"12%",render:s=>e.jsx("span",{style:{color:"#0a8f4c"},children:s||"-"})},{title:t("colLastVisit"),dataIndex:"last_ts",width:"9%",render:(s,a)=>e.jsx(T,{content:D(s),children:e.jsx("span",{children:M(s,ne,t)})})},{title:t("source"),dataIndex:"source",width:"12%",ellipsis:{showTitle:!1},render:(s,a)=>e.jsx(T,{content:a.ref_host||A(s),children:e.jsx("span",{children:ce(a)})})},{title:t("colStatus"),dataIndex:"online",width:"7%",render:(s,a)=>de(a)},{title:t("colStay"),dataIndex:"duration",width:"8%",render:s=>ae(s)},{title:t("colViews"),dataIndex:"pageviews",width:"7%"},{title:t("actions"),dataIndex:"id",width:"8%",render:(s,a)=>e.jsx(ze,{site:h,row:a,label:t("visitTrail"),btnStyle:{color:"#00b42a"}})}],he=e.jsxs("div",{style:{width:240,display:"flex",flexDirection:"column",gap:10,padding:4},children:[e.jsx(J,{size:"small",placeholder:t("srcAny"),style:{width:"100%"},value:x.source||void 0,onChange:s=>m(a=>({...a,source:s||""})),optionList:_e.map(s=>({value:s,label:A(s)})),showClear:!0}),e.jsx(J,{size:"small",placeholder:t("devAny"),style:{width:"100%"},value:x.device||void 0,onChange:s=>m(a=>({...a,device:s||""})),optionList:Pe.map(s=>({value:s,label:ve(s)})),showClear:!0}),e.jsx(Q,{size:"small",placeholder:t("browserPh"),value:x.browser,onChange:s=>m(a=>({...a,browser:s}))}),e.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:8},children:[e.jsx(j,{size:"small",onClick:()=>{const s={source:"",device:"",browser:""};m(s),_(a=>({...a,...s})),u(1)},children:t("advReset")}),e.jsx(j,{size:"small",theme:"solid",onClick:()=>{_(s=>({...s,source:x.source,device:x.device,browser:x.browser.trim()})),u(1)},children:t("advApply")})]})]});return e.jsxs("div",{className:"page",children:[e.jsxs("div",{className:"toolbar",children:[e.jsx(I.Title,{heading:5,style:{margin:0},children:t("realtime")}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[e.jsxs(I.Text,{type:"tertiary",size:"small",children:[t("autoRefresh")," ",z,"s"]}),e.jsx(j,{size:"small",theme:"solid",loading:b,onClick:()=>C(!1),children:t("search")})]})]}),y&&e.jsx(be,{type:"danger",description:y,style:{marginBottom:12}}),e.jsxs("div",{className:"stat-grid",children:[e.jsxs("div",{className:"stat-card",children:[e.jsx("div",{className:"stat-label",children:t("onlineNow")}),e.jsx("div",{className:"stat-value",style:{color:"#00b42a"},children:(i==null?void 0:i.online)??0}),e.jsx("div",{className:"stat-sub",children:t("onlineScope")})]}),e.jsxs("div",{className:"stat-card",children:[e.jsxs("div",{className:"stat-label",children:["PV · ",t("today")]}),e.jsx("div",{className:"stat-value",children:B((c==null?void 0:c.pv)??0)}),e.jsxs("div",{className:"stat-sub",children:[t("totalUV")," ",B((c==null?void 0:c.uv)??0)]})]}),e.jsxs("div",{className:"stat-card",children:[e.jsx("div",{className:"stat-label",children:t("totalIP")}),e.jsx("div",{className:"stat-value",children:B((c==null?void 0:c.ipc)??0)}),e.jsx("div",{className:"stat-sub",children:t("todayRealtime")})]})]}),H&&e.jsxs("div",{className:"chart-box",children:[e.jsx("div",{className:"card-title",children:t("liveTitle")}),e.jsx(Te,{option:H,height:220})]}),e.jsxs("div",{className:"card",style:{padding:"14px 16px 6px"},children:[e.jsxs("div",{className:"rt-filter",children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[e.jsx("span",{className:"rt-filter-label",children:t("rangeLabel")}),e.jsx(we,{type:"date",size:"small",format:"yyyy-MM-dd",value:v,onChange:s=>{g(typeof s=="string"?s.slice(0,10):K(s).format("YYYY-MM-DD")),u(1)},style:{width:148}}),e.jsxs(Se,{type:"button",buttonSize:"small",value:S,onChange:s=>{O(s.target.value),u(1)},children:[e.jsx(Z,{value:"all",children:t("mAll")}),e.jsx(Z,{value:"paid",children:t("rtPaid")})]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[e.jsx(Q,{size:"small",placeholder:t("ipSearchPh"),value:r,onChange:R,onEnterPress:()=>{_(s=>({...s,ip:r.trim()})),u(1)},style:{width:180},showClear:!0}),e.jsx(j,{size:"small",icon:e.jsx(ge,{}),onClick:()=>{_(s=>({...s,ip:r.trim()})),u(1)}}),e.jsx(fe,{trigger:"click",position:"bottomRight",content:he,children:e.jsx(j,{size:"small",children:t("rtAdvSearch")})})]})]}),b&&!i?e.jsx(ee,{active:!0,placeholder:e.jsx(ee.Paragraph,{rows:6}),loading:!0}):e.jsx(Ne,{className:"sessions-table",columns:pe,dataSource:P.items,rowKey:"id",size:"middle",empty:e.jsx(X,{description:t("emptyOnline")}),pagination:{currentPage:P.page,pageSize:P.page_size,total:P.total,onPageChange:s=>u(s),onPageSizeChange:s=>{re(s),u(1)},pageSizeOpts:[10,20,50],showSizeChanger:!0,showTotal:!0}})]})]})}export{Je as default};