Files
wecom_it_smart_desk/frontend-admin/dist_bak2/assets/TerminalSecurity-Cd8Pad6e.js
T

2 lines
18 KiB
JavaScript

import{d as ye,o as ke,b as r,c as m,e as t,f as s,w as i,t as n,h as f,V as he,W as be,Y as Ce,j as q,ad as X,X as F,n as w,r as g,v as we,U as R,i as y,a4 as Ae,g as d,a5 as G}from"./index-CXRNRwY6.js";import{S as L}from"./StatCard-CvXkeHsY.js";import{y as j,z as Q,A as De,B as Ne}from"./admin-WeuzXR_q.js";import{_ as xe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-BYeSIZFz.js";const ze={class:"terminal-security-page"},Ie={key:0,class:"connection-warning"},Ee={class:"stats-grid"},Te={class:"table-wrapper"},Be={class:"table-header-row"},Ge={class:"tab-group"},Le={class:"search-bar"},Se={class:"terminal-name"},We={class:"os-text"},Pe={key:1,class:"text-muted"},He={class:"time-text"},Me={class:"terminal-name"},Ve={class:"os-text"},Fe={class:"os-text"},Re={class:"terminal-name"},Ue={key:0,class:"virus-result-tags"},Oe={key:1,class:"text-muted"},Ze={class:"pagination-wrapper"},$e={key:0,style:{"text-align":"center",padding:"40px"}},Ke={key:1,class:"detail-content"},qe={class:"detail-section"},Xe={class:"detail-grid"},je={class:"detail-item"},Qe={class:"detail-value"},Ye={class:"detail-item"},Je={class:"detail-value"},et={key:0,class:"detail-item"},tt={class:"detail-value mono"},lt={class:"detail-item"},at={class:"detail-value"},st={class:"detail-item"},it={class:"detail-item"},nt={class:"detail-value"},ot={class:"detail-item"},rt={class:"detail-value"},ut={key:1,class:"detail-item"},ct={class:"detail-value"},dt={key:0,class:"detail-section"},_t={class:"detail-grid"},vt={key:0,class:"detail-item"},mt={class:"detail-value"},pt={key:1,class:"detail-item"},ft={class:"detail-value"},gt={key:2,class:"detail-item"},yt={class:"detail-value"},kt={class:"detail-section"},ht={class:"security-status-grid"},bt={class:"security-value"},Ct={class:"security-value"},wt={class:"security-value"},At={class:"detail-section"},Dt={class:"action-buttons"},Nt=ye({__name:"TerminalSecurity",setup(xt){const Y=[{key:"terminals",label:"全部终端"},{key:"leaks",label:"高危漏洞"},{key:"virus",label:"病毒事件"}],b=g("terminals"),T=g(!1),A=g(""),u=we({total_terminals:0,online_terminals:0,high_risk_terminals:0,virus_events_today:0,isolated_terminals:0}),C=g([]),z=g([]),I=g([]),E=g(1),B=g(20),D=g(0),h=g(""),S=g(!1),W=g(!1),o=g(null),P={background:"var(--bg-tertiary)",color:"var(--text-secondary)",fontSize:"12px"},H={color:"var(--text-primary)",fontSize:"13px"},J=R(()=>{if(!h.value)return C.value;const a=h.value.toLowerCase();return C.value.filter(e=>e.computer_name.toLowerCase().includes(a)||e.local_ip.toLowerCase().includes(a))}),ee=R(()=>{if(!h.value)return z.value;const a=h.value.toLowerCase();return z.value.filter(e=>e.hostname.toLowerCase().includes(a)||e.ip_addr.toLowerCase().includes(a))}),te=R(()=>{if(!h.value)return I.value;const a=h.value.toLowerCase();return I.value.filter(e=>e.computer_name.toLowerCase().includes(a)||e.local_ip.toLowerCase().includes(a))});ke(()=>{N(),le()});async function le(){try{const e=await j({page:1,per_page:1});e.error||(u.high_risk_terminals=e.risk_client||0,e.all_client&&(u.total_terminals=e.all_client));const v=await Q({page:1,per_page:200});if(!v.error){const _=v.items||[];u.virus_events_today=_.reduce((x,c)=>{var p;return x+(((p=c.result)==null?void 0:p.fail)||0)},0)}}catch{}}async function N(){T.value=!0,A.value="";try{b.value==="terminals"?await ae():b.value==="leaks"?await se():b.value==="virus"&&await ie()}finally{T.value=!1}}async function ae(){try{const e=await De({page:E.value,per_page:B.value});if(e.error){A.value=e.error,U();return}C.value=e.items||[],D.value=e.total||0,u.total_terminals=e.total||C.value.length;const k=C.value.filter(_=>_.is_online).length,v=C.value.length||1;u.online_terminals=Math.round(k/v*u.total_terminals)}catch{A.value="无法连接火绒API,请检查集成配置",U()}}async function se(){try{const e=await j({page:E.value,per_page:B.value});if(e.error){A.value=e.error,O();return}z.value=e.items||[],D.value=e.risk_client||e.total||z.value.length,u.high_risk_terminals=e.risk_client||0,e.all_client&&(u.total_terminals=e.all_client)}catch{O()}}async function ie(){try{const e=await Q({page:E.value,per_page:B.value});if(e.error){A.value=e.error,Z();return}I.value=e.items||[],D.value=e.total||0,u.virus_events_today=I.value.reduce((k,v)=>{var _;return k+(((_=v.result)==null?void 0:_.fail)||0)},0)}catch{Z()}}function U(){C.value=[{client_id:"d1",client_name:"IT-SONGXIAN",computer_name:"IT-SONGXIAN",local_ip:"192.168.3.101",connect_ip:"192.168.3.101",mac:"AA-BB-CC-DD-EE-01",group_id:1,os_version:"Windows 11 Pro",version:"2.0.18.3",definitions:"2026-06-12",is_online:!0,last_connect_time:Math.floor(Date.now()/1e3),risk_level:"safe",virus_count:0,leak_count:0},{client_id:"d2",client_name:"IT-WANGLI",computer_name:"IT-WANGLI",local_ip:"192.168.3.102",connect_ip:"192.168.3.102",mac:"AA-BB-CC-DD-EE-02",group_id:1,os_version:"Windows 10 Pro",version:"2.0.18.3",definitions:"2026-06-11",is_online:!1,last_connect_time:Math.floor((Date.now()-36e5)/1e3),risk_level:"low",virus_count:0,leak_count:2},{client_id:"d3",client_name:"FIN-ZHAOGANG",computer_name:"FIN-ZHAOGANG",local_ip:"192.168.3.201",connect_ip:"192.168.3.201",mac:"AA-BB-CC-DD-EE-03",group_id:2,os_version:"Windows 11 Pro",version:"2.0.18.2",definitions:"2026-06-10",is_online:!0,last_connect_time:Math.floor(Date.now()/1e3),risk_level:"high",virus_count:1,leak_count:5},{client_id:"d4",client_name:"HR-SUNFANG",computer_name:"HR-SUNFANG",local_ip:"192.168.3.301",connect_ip:"192.168.3.301",mac:"AA-BB-CC-DD-EE-04",group_id:3,os_version:"Windows 10 Pro",version:"2.0.18.3",definitions:"2026-06-12",is_online:!0,last_connect_time:Math.floor(Date.now()/1e3),risk_level:"medium",virus_count:0,leak_count:3},{client_id:"d5",client_name:"MKT-ZHOULEI",computer_name:"MKT-ZHOULEI",local_ip:"192.168.3.401",connect_ip:"192.168.3.401",mac:"AA-BB-CC-DD-EE-05",group_id:4,os_version:"macOS 14.5",version:"2.0.18.3",definitions:"2026-06-12",is_online:!0,last_connect_time:Math.floor(Date.now()/1e3),risk_level:"safe",virus_count:0,leak_count:0},{client_id:"d6",client_name:"RD-WUTING",computer_name:"RD-WUTING",local_ip:"192.168.3.501",connect_ip:"192.168.3.501",mac:"AA-BB-CC-DD-EE-06",group_id:5,os_version:"Windows 11 Pro",version:"2.0.18.3",definitions:"2026-06-12",is_online:!0,last_connect_time:Math.floor(Date.now()/1e3),risk_level:"low",virus_count:0,leak_count:1}],D.value=C.value.length,u.total_terminals=6,u.online_terminals=5,u.high_risk_terminals=1,u.virus_events_today=1}function O(){z.value=[{cid:"d3",hostname:"FIN-ZHAOGANG",client_name:"FIN-ZHAOGANG",group_name:"财务部",group_id:2,ip_addr:"192.168.3.201",call_ip:"192.168.3.201",mac:"AA-BB-CC-DD-EE-03",osver:"Windows 11 Pro",os_type:"Windows",prodver:"2.0.18.2",virdb:1718e6,stat:2},{cid:"d4",hostname:"HR-SUNFANG",client_name:"HR-SUNFANG",group_name:"人力资源部",group_id:3,ip_addr:"192.168.3.301",call_ip:"192.168.3.301",mac:"AA-BB-CC-DD-EE-04",osver:"Windows 10 Pro",os_type:"Windows",prodver:"2.0.18.3",virdb:1718e6,stat:2},{cid:"d2",hostname:"IT-WANGLI",client_name:"IT-WANGLI",group_name:"IT部",group_id:1,ip_addr:"192.168.3.102",call_ip:"192.168.3.102",mac:"AA-BB-CC-DD-EE-02",osver:"Windows 10 Pro",os_type:"Windows",prodver:"2.0.18.3",virdb:17179e5,stat:1}],D.value=z.value.length,u.high_risk_terminals=3}function Z(){I.value=[{group_id:2,client_id:"d3",client_name:"FIN-ZHAOGANG",computer_name:"FIN-ZHAOGANG",local_ip:"192.168.3.201",connect_ip:"192.168.3.201",mac:"AA-BB-CC-DD-EE-03",count:3,result:{success:2,fail:1,ignored:0,trusted:0}}],D.value=I.value.length,u.virus_events_today=1}function ne(a){b.value=a,E.value=1,h.value="",N()}async function oe(a){S.value=!0,W.value=!0,o.value=null;try{const k=await Ne(a.client_id);k.error?o.value={client_id:a.client_id,computer_name:a.computer_name,local_ip:a.local_ip,mac:a.mac,os_version:a.os_version,version:a.version,is_online:a.is_online,last_connect_time:a.last_connect_time,risk_level:a.risk_level||"safe",virus_count:a.virus_count||0,leak_count:a.leak_count||0,is_isolated:!1}:o.value=k}catch{o.value={client_id:a.client_id,computer_name:a.computer_name,local_ip:a.local_ip,mac:a.mac,os_version:a.os_version,version:a.version,is_online:a.is_online,last_connect_time:a.last_connect_time,risk_level:a.risk_level||"safe",virus_count:a.virus_count||0,leak_count:a.leak_count||0,is_isolated:!1}}finally{W.value=!1}}function $(a){return a?a.length>16?a.substring(0,15)+"...":a:"—"}function re(a){if(!a)return"—";try{const e=new Date(a*1e3),v=new Date().getTime()-e.getTime(),_=Math.floor(v/6e4);if(_<1)return"刚刚";if(_<60)return`${_}分钟前`;const x=Math.floor(_/60);return x<24?`${x}小时前`:`${Math.floor(x/24)}天前`}catch{return"—"}}function ue(a){if(!a)return"—";try{return new Date(a*1e3).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"—"}}function ce(a){switch(a){case"high":return"danger";case"medium":return"warning";case"low":return"info";case"safe":return"success";default:return"info"}}function de(a){switch(a){case"high":return"高危";case"medium":return"中危";case"low":return"低危";case"safe":return"安全";default:return a}}return(a,e)=>{var K;const k=y("WarningFilled"),v=y("el-icon"),_=y("el-button"),x=y("el-input"),c=y("el-table-column"),p=y("el-tag"),M=y("el-table"),_e=y("el-pagination"),ve=y("Loading"),me=y("Refresh"),pe=y("Connection"),fe=y("Bell"),ge=y("el-drawer"),V=Ae("loading");return r(),m("div",ze,[e[29]||(e[29]=t("div",{class:"page-title"},"终端安全",-1)),e[30]||(e[30]=t("div",{class:"page-desc"},"火绒企业版终端安全数据,实时查看终端状态、漏洞和病毒事件",-1)),A.value?(r(),m("div",Ie,[s(v,{size:16},{default:i(()=>[s(k)]),_:1}),t("span",null,n(A.value),1),s(_,{size:"small",text:"",type:"primary",onClick:e[0]||(e[0]=l=>a.$router.push("/integrations"))},{default:i(()=>[...e[5]||(e[5]=[d(" 去配置 ",-1)])]),_:1})])):f("",!0),t("div",Ee,[s(L,{label:"终端总数",value:u.total_terminals,valueColor:"var(--accent)",icon:"Monitor",iconColor:"var(--accent)"},null,8,["value"]),s(L,{label:"在线终端",value:u.online_terminals,valueColor:"var(--success)",icon:"CircleCheckFilled",iconColor:"var(--success)"},null,8,["value"]),s(L,{label:"高危漏洞终端",value:u.high_risk_terminals,valueColor:"var(--danger)",icon:"WarningFilled",iconColor:"var(--danger)"},null,8,["value"]),s(L,{label:"今日病毒事件",value:u.virus_events_today,valueColor:"var(--warning)",icon:"Virus",iconColor:"var(--warning)"},null,8,["value"])]),t("div",Te,[t("div",Be,[t("div",Ge,[(r(),m(he,null,be(Y,l=>s(_,{key:l.key,type:b.value===l.key?"primary":"default",size:"small",onClick:zt=>ne(l.key)},{default:i(()=>[d(n(l.label),1)]),_:2},1032,["type","onClick"])),64))]),t("div",Le,[s(x,{modelValue:h.value,"onUpdate:modelValue":e[1]||(e[1]=l=>h.value=l),placeholder:"搜索计算机名或IP","prefix-icon":q(X),clearable:"",size:"small",style:{width:"220px"},onClear:N,onKeyup:Ce(N,["enter"])},null,8,["modelValue","prefix-icon"]),s(_,{size:"small",type:"primary",onClick:N},{default:i(()=>[s(v,null,{default:i(()=>[s(q(X))]),_:1}),e[6]||(e[6]=d(" 刷新 ",-1))]),_:1})])]),b.value==="terminals"?F((r(),w(M,{key:0,data:J.value,style:{width:"100%"},"header-cell-style":P,"cell-style":H,"row-class-name":"terminal-table-row","element-loading-text":"正在加载终端数据...",onRowClick:oe},{default:i(()=>[s(c,{label:"计算机名","min-width":"140"},{default:i(({row:l})=>[t("span",Se,n(l.computer_name),1)]),_:1}),s(c,{label:"IP地址",width:"130"},{default:i(({row:l})=>[d(n(l.local_ip),1)]),_:1}),s(c,{label:"分组",width:"100"},{default:i(({row:l})=>[s(p,{size:"small",effect:"plain"},{default:i(()=>[d(n(l.group_id||"—"),1)]),_:2},1024)]),_:1}),s(c,{label:"操作系统",width:"110"},{default:i(({row:l})=>[t("span",We,n($(l.os_version)),1)]),_:1}),s(c,{label:"状态",width:"80",align:"center"},{default:i(({row:l})=>[s(p,{type:l.is_online?"success":"info",size:"small",effect:"dark"},{default:i(()=>[d(n(l.is_online?"在线":"离线"),1)]),_:2},1032,["type"])]),_:1}),s(c,{label:"风险",width:"80",align:"center"},{default:i(({row:l})=>[l.risk_level?(r(),w(p,{key:0,type:ce(l.risk_level),size:"small"},{default:i(()=>[d(n(de(l.risk_level)),1)]),_:2},1032,["type"])):(r(),m("span",Pe,"—"))]),_:1}),s(c,{label:"最后活跃",width:"110"},{default:i(({row:l})=>[t("span",He,n(re(l.last_connect_time)),1)]),_:1})]),_:1},8,["data"])),[[V,T.value]]):b.value==="leaks"?F((r(),w(M,{key:1,data:ee.value,style:{width:"100%"},"header-cell-style":P,"cell-style":H,"row-class-name":"terminal-table-row","element-loading-text":"正在加载漏洞数据..."},{default:i(()=>[s(c,{label:"计算机名","min-width":"140"},{default:i(({row:l})=>[t("span",Me,n(l.hostname),1)]),_:1}),s(c,{label:"IP地址",width:"130"},{default:i(({row:l})=>[d(n(l.ip_addr),1)]),_:1}),s(c,{label:"分组",width:"100"},{default:i(({row:l})=>[s(p,{size:"small",effect:"plain"},{default:i(()=>[d(n(l.group_name||l.group_id||"—"),1)]),_:2},1024)]),_:1}),s(c,{label:"操作系统",width:"110"},{default:i(({row:l})=>[t("span",Ve,n($(l.osver)),1)]),_:1}),s(c,{label:"状态",width:"80",align:"center"},{default:i(({row:l})=>[s(p,{type:l.stat===2?"success":"info",size:"small",effect:"dark"},{default:i(()=>[d(n(l.stat===2?"在线":l.stat===3?"异常":"离线"),1)]),_:2},1032,["type"])]),_:1}),s(c,{label:"客户端版本",width:"110"},{default:i(({row:l})=>[t("span",Fe,n(l.prodver||"—"),1)]),_:1})]),_:1},8,["data"])),[[V,T.value]]):b.value==="virus"?F((r(),w(M,{key:2,data:te.value,style:{width:"100%"},"header-cell-style":P,"cell-style":H,"row-class-name":"terminal-table-row","element-loading-text":"正在加载病毒事件..."},{default:i(()=>[s(c,{label:"计算机名","min-width":"140"},{default:i(({row:l})=>[t("span",Re,n(l.computer_name),1)]),_:1}),s(c,{label:"IP地址",width:"130"},{default:i(({row:l})=>[d(n(l.local_ip),1)]),_:1}),s(c,{label:"病毒日志数",width:"100",align:"center"},{default:i(({row:l})=>[t("span",{class:G({"text-danger":l.count>0})},n(l.count),3)]),_:1}),s(c,{label:"处理结果","min-width":"200"},{default:i(({row:l})=>[l.result?(r(),m("div",Ue,[l.result.success>0?(r(),w(p,{key:0,type:"success",size:"small",effect:"plain",style:{margin:"2px"}},{default:i(()=>[d(" 成功 "+n(l.result.success),1)]),_:2},1024)):f("",!0),l.result.fail>0?(r(),w(p,{key:1,type:"danger",size:"small",effect:"plain",style:{margin:"2px"}},{default:i(()=>[d(" 失败 "+n(l.result.fail),1)]),_:2},1024)):f("",!0),l.result.ignored>0?(r(),w(p,{key:2,type:"warning",size:"small",effect:"plain",style:{margin:"2px"}},{default:i(()=>[d(" 忽略 "+n(l.result.ignored),1)]),_:2},1024)):f("",!0),l.result.trusted>0?(r(),w(p,{key:3,type:"info",size:"small",effect:"plain",style:{margin:"2px"}},{default:i(()=>[d(" 信任 "+n(l.result.trusted),1)]),_:2},1024)):f("",!0)])):(r(),m("span",Oe,"—"))]),_:1})]),_:1},8,["data"])),[[V,T.value]]):f("",!0),t("div",Ze,[s(_e,{"current-page":E.value,"onUpdate:currentPage":e[2]||(e[2]=l=>E.value=l),"page-size":B.value,"onUpdate:pageSize":e[3]||(e[3]=l=>B.value=l),"page-sizes":[20,50,100],total:D.value,layout:"total, sizes, prev, pager, next",small:"",onSizeChange:N,onCurrentChange:N},null,8,["current-page","page-size","total"])])]),s(ge,{modelValue:S.value,"onUpdate:modelValue":e[4]||(e[4]=l=>S.value=l),title:((K=o.value)==null?void 0:K.computer_name)||"终端详情",direction:"rtl",size:"420px","destroy-on-close":""},{default:i(()=>[W.value?(r(),m("div",$e,[s(v,{size:24,class:"is-loading"},{default:i(()=>[s(ve)]),_:1}),e[7]||(e[7]=t("div",{style:{"margin-top":"8px",color:"var(--text-secondary)"}},"加载中...",-1))])):o.value?(r(),m("div",Ke,[t("div",qe,[e[16]||(e[16]=t("div",{class:"detail-section-title"},"基本信息",-1)),t("div",Xe,[t("div",je,[e[8]||(e[8]=t("span",{class:"detail-label"},"计算机名",-1)),t("span",Qe,n(o.value.computer_name),1)]),t("div",Ye,[e[9]||(e[9]=t("span",{class:"detail-label"},"IP地址",-1)),t("span",Je,n(o.value.local_ip),1)]),o.value.mac?(r(),m("div",et,[e[10]||(e[10]=t("span",{class:"detail-label"},"MAC地址",-1)),t("span",tt,n(o.value.mac),1)])):f("",!0),t("div",lt,[e[11]||(e[11]=t("span",{class:"detail-label"},"操作系统",-1)),t("span",at,n(o.value.os_version),1)]),t("div",st,[e[12]||(e[12]=t("span",{class:"detail-label"},"状态",-1)),s(p,{type:o.value.is_online?"success":"info",size:"small",effect:"dark"},{default:i(()=>[d(n(o.value.is_online?"在线":"离线"),1)]),_:1},8,["type"])]),t("div",it,[e[13]||(e[13]=t("span",{class:"detail-label"},"客户端版本",-1)),t("span",nt,n(o.value.version||"—"),1)]),t("div",ot,[e[14]||(e[14]=t("span",{class:"detail-label"},"分组",-1)),t("span",rt,n(o.value.group_id||"—"),1)]),o.value.last_connect_time?(r(),m("div",ut,[e[15]||(e[15]=t("span",{class:"detail-label"},"最后活跃",-1)),t("span",ct,n(ue(o.value.last_connect_time)),1)])):f("",!0)])]),o.value.cpu||o.value.memory?(r(),m("div",dt,[e[20]||(e[20]=t("div",{class:"detail-section-title"},"硬件信息",-1)),t("div",_t,[o.value.cpu?(r(),m("div",vt,[e[17]||(e[17]=t("span",{class:"detail-label"},"CPU",-1)),t("span",mt,n(o.value.cpu),1)])):f("",!0),o.value.memory?(r(),m("div",pt,[e[18]||(e[18]=t("span",{class:"detail-label"},"内存",-1)),t("span",ft,n(o.value.memory),1)])):f("",!0),o.value.disk?(r(),m("div",gt,[e[19]||(e[19]=t("span",{class:"detail-label"},"硬盘",-1)),t("span",yt,n(o.value.disk),1)])):f("",!0)])])):f("",!0),t("div",kt,[e[24]||(e[24]=t("div",{class:"detail-section-title"},"安全状态",-1)),t("div",ht,[t("div",{class:G(["security-item",o.value.virus_count>0?"danger":"safe"])},[t("div",bt,n(o.value.virus_count),1),e[21]||(e[21]=t("div",{class:"security-label"},"病毒检测",-1))],2),t("div",{class:G(["security-item",o.value.leak_count>0?"danger":"safe"])},[t("div",Ct,n(o.value.leak_count),1),e[22]||(e[22]=t("div",{class:"security-label"},"高危漏洞",-1))],2),t("div",{class:G(["security-item",o.value.is_isolated?"warning":"safe"])},[t("div",wt,n(o.value.is_isolated?"是":"否"),1),e[23]||(e[23]=t("div",{class:"security-label"},"网络隔离",-1))],2)])]),t("div",At,[e[27]||(e[27]=t("div",{class:"detail-section-title"},"安全操作",-1)),t("div",Dt,[s(_,{size:"small",disabled:""},{default:i(()=>[s(v,null,{default:i(()=>[s(me)]),_:1}),e[25]||(e[25]=d(" 触发全盘扫描 ",-1))]),_:1}),s(_,{size:"small",type:o.value.is_isolated?"success":"danger",disabled:""},{default:i(()=>[s(v,null,{default:i(()=>[s(pe)]),_:1}),d(" "+n(o.value.is_isolated?"解除隔离":"网络隔离"),1)]),_:1},8,["type"]),s(_,{size:"small",disabled:""},{default:i(()=>[s(v,null,{default:i(()=>[s(fe)]),_:1}),e[26]||(e[26]=d(" 推送消息 ",-1))]),_:1})]),e[28]||(e[28]=t("div",{class:"action-hint"},"安全操作需火绒 API 配置完成后启用",-1))])])):f("",!0)]),_:1},8,["modelValue","title"])])}}}),Lt=xe(Nt,[["__scopeId","data-v-085081c4"]]);export{Lt as default};