mirror of
https://github.com/foxhui/WebAI2API.git
synced 2026-06-16 21:03:59 +08:00
3 lines
9.3 KiB
JavaScript
3 lines
9.3 KiB
JavaScript
import{c as t,I as F,_ as le,k as ne,r as p,n as oe,o as re,a as ce,j as x,d as C,w as n,g as o,f,u as y,C as ie,t as g,i as I,h as _,D as N,R as $,z as ue,e as T,b as de,F as U,p as ve,m as h,M as P,A as fe,B as me}from"./index.js";var pe={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M304 280h56c4.4 0 8-3.6 8-8 0-28.3 5.9-53.2 17.1-73.5 10.6-19.4 26-34.8 45.4-45.4C450.9 142 475.7 136 504 136h16c28.3 0 53.2 5.9 73.5 17.1 19.4 10.6 34.8 26 45.4 45.4C650 218.9 656 243.7 656 272c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-40-8.8-76.7-25.9-108.1a184.31 184.31 0 00-74-74C596.7 72.8 560 64 520 64h-16c-40 0-76.7 8.8-108.1 25.9a184.31 184.31 0 00-74 74C304.8 195.3 296 232 296 272c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M940 512H792V412c76.8 0 139-62.2 139-139 0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8a63 63 0 01-63 63H232a63 63 0 01-63-63c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8 0 76.8 62.2 139 139 139v100H84c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h148v96c0 6.5.2 13 .7 19.3C164.1 728.6 116 796.7 116 876c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-44.2 23.9-82.9 59.6-103.7a273 273 0 0022.7 49c24.3 41.5 59 76.2 100.5 100.5S460.5 960 512 960s99.8-13.9 141.3-38.2a281.38 281.38 0 00123.2-149.5A120 120 0 01836 876c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8 0-79.3-48.1-147.4-116.7-176.7.4-6.4.7-12.8.7-19.3v-96h148c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM716 680c0 36.8-9.7 72-27.8 102.9-17.7 30.3-43 55.6-73.3 73.3C584 874.3 548.8 884 512 884s-72-9.7-102.9-27.8c-30.3-17.7-55.6-43-73.3-73.3A202.75 202.75 0 01308 680V412h408v268z"}}]},name:"bug",theme:"outlined"};function A(r){for(var a=1;a<arguments.length;a++){var s=arguments[a]!=null?Object(arguments[a]):{},i=Object.keys(s);typeof Object.getOwnPropertySymbols=="function"&&(i=i.concat(Object.getOwnPropertySymbols(s).filter(function(d){return Object.getOwnPropertyDescriptor(s,d).enumerable}))),i.forEach(function(d){ge(r,d,s[d])})}return r}function ge(r,a,s){return a in r?Object.defineProperty(r,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):r[a]=s,r}var S=function(a,s){var i=A({},a,s.attrs);return t(F,A({},i,{icon:pe}),null)};S.displayName="BugOutlined";S.inheritAttrs=!1;var _e={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M464 720a48 48 0 1096 0 48 48 0 10-96 0zm16-304v184c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V416c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8zm475.7 440l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48zm-783.5-27.9L512 239.9l339.8 588.2H172.2z"}}]},name:"warning",theme:"outlined"};function H(r){for(var a=1;a<arguments.length;a++){var s=arguments[a]!=null?Object(arguments[a]):{},i=Object.keys(s);typeof Object.getOwnPropertySymbols=="function"&&(i=i.concat(Object.getOwnPropertySymbols(s).filter(function(d){return Object.getOwnPropertyDescriptor(s,d).enumerable}))),i.forEach(function(d){he(r,d,s[d])})}return r}function he(r,a,s){return a in r?Object.defineProperty(r,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):r[a]=s,r}var j=function(a,s){var i=H({},a,s.attrs);return t(F,H({},i,{icon:_e}),null)};j.displayName="WarningOutlined";j.inheritAttrs=!1;const ye={class:"stats-content"},be={class:"stats-numbers"},Oe={class:"stat-item success"},we={class:"stat-value"},Ye={class:"stat-item error"},Ce={class:"stat-value"},De={class:"stat-item neutral"},ke={class:"stat-value"},xe={class:"toolbar"},Me={class:"toolbar-row"},Re={class:"toolbar-row"},ze={style:{"margin-bottom":"12px",color:"#8c8c8c","font-size":"12px"}},Le={key:0,style:{color:"#1890ff","margin-left":"8px"}},Be={class:"log-container"},Se={class:"log-meta"},je={class:"log-module"},Ee={class:"log-time"},Ie={class:"log-message"},Ne={__name:"logs",setup(r){const a=ne(),s=p([]),i=p(!1),d=p(0),w=p(!1),b=p(null),D=p(""),k=p("all"),v=p([]),O=p({success:0,failed:0,days:0}),M=p(!1),V={INFO:{color:"#1890ff",icon:me},WARN:{color:"#faad14",icon:j},ERRO:{color:"#ff4d4f",icon:I},DBUG:{color:"#722ed1",icon:S}},R=async()=>{i.value=!0;try{const l=await fetch("/admin/logs?lines=500",{headers:a.getHeaders()});if(l.ok){const e=await l.json();s.value=W(e.logs||[]),d.value=e.total||0}}catch{h.error("获取日志失败")}finally{i.value=!1}},W=l=>l.map((e,c)=>{const m=e.match(/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) \[(\w+)\] \[([^\]]+)\] (.*)$/);return m?{id:c,time:m[1],level:m[2],module:m[3],message:m[4],raw:e}:{id:c,raw:e,level:"INFO",time:"",module:"",message:e}}),z=oe(()=>s.value.filter(e=>{if(k.value!=="all"&&e.level!==k.value)return!1;if(D.value){const c=D.value.toLowerCase();return e.raw.toLowerCase().includes(c)}return!0}).reverse()),G=()=>{P.confirm({title:"确认清除日志",content:"此操作将删除所有系统日志文件,是否继续?",okText:"确认清除",okType:"danger",cancelText:"取消",async onOk(){try{(await fetch("/admin/logs",{method:"DELETE",headers:a.getHeaders()})).ok?(h.success("日志已清除"),s.value=[],d.value=0):h.error("清除失败")}catch{h.error("请求失败")}}})},q=()=>{const l=s.value.map(L=>L.raw).join(`
|
|
`),e=new Blob([l],{type:"text/plain"}),c=URL.createObjectURL(e),m=document.createElement("a");m.href=c,m.download=`system-${new Date().toISOString().split("T")[0]}.log`,m.click(),URL.revokeObjectURL(c)},J=l=>{w.value=l,l?(R(),b.value=setInterval(R,5e3)):b.value&&(clearInterval(b.value),b.value=null)},Q=async()=>{if(!v.value||v.value.length!==2){O.value={success:0,failed:0,days:0};return}M.value=!0;try{const[l,e]=v.value,c=await fetch(`/admin/stats/range?start=${l.format("YYYY-MM-DD")}&end=${e.format("YYYY-MM-DD")}`,{headers:a.getHeaders()});c.ok&&(O.value=await c.json())}catch{h.error("获取统计失败")}finally{M.value=!1}},X=()=>{if(!v.value||v.value.length!==2){h.warning("请先选择日期范围");return}P.confirm({title:"确认删除",content:`确定要删除 ${v.value[0].format("YYYY-MM-DD")} 至 ${v.value[1].format("YYYY-MM-DD")} 的统计数据吗?`,okText:"删除",okType:"danger",cancelText:"取消",async onOk(){try{const[l,e]=v.value;(await fetch(`/admin/stats/range?start=${l.format("YYYY-MM-DD")}&end=${e.format("YYYY-MM-DD")}`,{method:"DELETE",headers:a.getHeaders()})).ok&&(h.success("统计数据已删除"),O.value={success:0,failed:0,days:0})}catch{h.error("删除失败")}}})};return re(()=>{R()}),ce(()=>{b.value&&clearInterval(b.value)}),(l,e)=>{const c=f("a-button"),m=f("a-range-picker"),L=f("a-divider"),Z=f("a-spin"),E=f("a-card"),Y=f("a-select-option"),K=f("a-select"),B=f("a-tooltip"),ee=f("a-space"),te=f("a-input-search"),ae=f("a-tag"),se=f("a-empty");return C(),x(U,null,[t(E,{title:"请求统计",bordered:!1},{extra:n(()=>[t(c,{type:"link",danger:"",size:"small",onClick:X,disabled:!v.value||v.value.length!==2},{icon:n(()=>[t(y(N))]),default:n(()=>[e[4]||(e[4]=_(" 删除统计 ",-1))]),_:1},8,["disabled"])]),default:n(()=>[o("div",ye,[t(m,{value:v.value,"onUpdate:value":e[0]||(e[0]=u=>v.value=u),format:"YYYY-MM-DD",placeholder:["开始日期","结束日期"],size:"small",class:"stats-date-picker",onChange:Q},null,8,["value"]),t(L,{type:"vertical",style:{height:"32px",margin:"0 16px"}}),t(Z,{spinning:M.value,size:"small"},{default:n(()=>[o("div",be,[o("div",Oe,[t(y(ie)),o("span",we,g(O.value.success),1),e[5]||(e[5]=o("span",{class:"stat-label"},"成功",-1))]),o("div",Ye,[t(y(I)),o("span",Ce,g(O.value.failed),1),e[6]||(e[6]=o("span",{class:"stat-label"},"失败",-1))]),o("div",De,[o("span",ke,g(O.value.days),1),e[7]||(e[7]=o("span",{class:"stat-label"},"天",-1))])])]),_:1},8,["spinning"])])]),_:1}),t(E,{title:"系统日志",bordered:!1,style:{"margin-top":"24px"}},{default:n(()=>[o("div",xe,[o("div",Me,[t(K,{value:k.value,"onUpdate:value":e[1]||(e[1]=u=>k.value=u),style:{width:"90px"},size:"small"},{default:n(()=>[t(Y,{value:"all"},{default:n(()=>[...e[8]||(e[8]=[_("全部",-1)])]),_:1}),t(Y,{value:"INFO"},{default:n(()=>[...e[9]||(e[9]=[_("INFO",-1)])]),_:1}),t(Y,{value:"WARN"},{default:n(()=>[...e[10]||(e[10]=[_("WARN",-1)])]),_:1}),t(Y,{value:"ERRO"},{default:n(()=>[...e[11]||(e[11]=[_("ERROR",-1)])]),_:1}),t(Y,{value:"DBUG"},{default:n(()=>[...e[12]||(e[12]=[_("DEBUG",-1)])]),_:1})]),_:1},8,["value"]),t(ee,{size:4},{default:n(()=>[t(B,{title:w.value?"关闭自动刷新":"开启自动刷新"},{default:n(()=>[t(c,{size:"small",type:w.value?"primary":"default",onClick:e[2]||(e[2]=u=>J(!w.value))},{icon:n(()=>[t(y($))]),_:1},8,["type"])]),_:1},8,["title"]),t(B,{title:"导出日志"},{default:n(()=>[t(c,{size:"small",onClick:q},{icon:n(()=>[t(y(ue))]),_:1})]),_:1}),t(B,{title:"清除日志"},{default:n(()=>[t(c,{size:"small",danger:"",onClick:G},{icon:n(()=>[t(y(N))]),_:1})]),_:1})]),_:1})]),o("div",Re,[t(te,{value:D.value,"onUpdate:value":e[3]||(e[3]=u=>D.value=u),placeholder:"搜索日志",size:"small","enter-button":"","allow-clear":"",style:{width:"100%"}},null,8,["value"])])]),o("div",ze,[_(" 共 "+g(d.value)+" 条日志,当前显示 "+g(z.value.length)+" 条 ",1),w.value?(C(),x("span",Le,[t(y($),{spin:!0}),e[13]||(e[13]=_(" 自动刷新中 ",-1))])):T("",!0)]),o("div",Be,[(C(!0),x(U,null,ve(z.value,u=>(C(),x("div",{key:u.id,class:fe(["log-line","level-"+u.level.toLowerCase()])},[o("div",Se,[t(ae,{color:V[u.level]?.color||"#8c8c8c",size:"small",style:{margin:"0"}},{default:n(()=>[_(g(u.level),1)]),_:2},1032,["color"]),o("span",je,"["+g(u.module)+"]",1),o("span",Ee,g(u.time),1)]),o("span",Ie,g(u.message),1)],2))),128)),z.value.length===0?(C(),de(se,{key:0,description:"暂无日志"})):T("",!0)])]),_:1})],64)}}},Te=le(Ne,[["__scopeId","data-v-bfed2dd2"]]);export{Te as default};
|