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,T as he,U as be,W as Ce,j as q,ab as X,V as F,n as w,r as g,v as we,S as R,i as y,a2 as Ae,g as c,a3 as G}from"./index-CcYCuTIa.js";import{S as L}from"./StatCard-xjbOwrQZ.js";import{y as j,z as Q,A as De,B as Ne}from"./admin-i6XhhI1Z.js";import{_ as xe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./index-CPDTx6RU.js";const ze={class:"terminal-security-page"},Ie={key:0,class:"connection-warning"},Te={class:"stats-grid"},Ee={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"},Je={class:"detail-item"},Ye={class:"detail-value"},et={key:0,class:"detail-item"},tt={class:"detail-value mono"},at={class:"detail-item"},lt={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"},dt={class:"detail-value"},ct={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 J=[{key:"terminals",label:"全部终端"},{key:"leaks",label:"高危漏洞"},{key:"virus",label:"病毒事件"}],b=g("terminals"),E=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([]),T=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"},Y=R(()=>{if(!h.value)return C.value;const l=h.value.toLowerCase();return C.value.filter(e=>e.computer_name.toLowerCase().includes(l)||e.local_ip.toLowerCase().includes(l))}),ee=R(()=>{if(!h.value)return z.value;const l=h.value.toLowerCase();return z.value.filter(e=>e.hostname.toLowerCase().includes(l)||e.ip_addr.toLowerCase().includes(l))}),te=R(()=>{if(!h.value)return I.value;const l=h.value.toLowerCase();return I.value.filter(e=>e.computer_name.toLowerCase().includes(l)||e.local_ip.toLowerCase().includes(l))});ke(()=>{N(),ae()});async function ae(){try{const e=(await j({page:1,per_page:1})).data.data;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})).data.data;if(!v.error){const _=v.items||[];u.virus_events_today=_.reduce((x,d)=>{var p;return x+(((p=d.result)==null?void 0:p.fail)||0)},0)}}catch{}}async function N(){E.value=!0,A.value="";try{b.value==="terminals"?await le():b.value==="leaks"?await se():b.value==="virus"&&await ie()}finally{E.value=!1}}async function le(){try{const e=(await De({page:T.value,per_page:B.value})).data.data;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:T.value,per_page:B.value})).data.data;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:T.value,per_page:B.value})).data.data;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(l){b.value=l,T.value=1,h.value="",N()}async function oe(l){S.value=!0,W.value=!0,o.value=null;try{const k=(await Ne(l.client_id)).data.data;k.error?o.value={client_id:l.client_id,computer_name:l.computer_name,local_ip:l.local_ip,mac:l.mac,os_version:l.os_version,version:l.version,is_online:l.is_online,last_connect_time:l.last_connect_time,risk_level:l.risk_level||"safe",virus_count:l.virus_count||0,leak_count:l.leak_count||0,is_isolated:!1}:o.value=k}catch{o.value={client_id:l.client_id,computer_name:l.computer_name,local_ip:l.local_ip,mac:l.mac,os_version:l.os_version,version:l.version,is_online:l.is_online,last_connect_time:l.last_connect_time,risk_level:l.risk_level||"safe",virus_count:l.virus_count||0,leak_count:l.leak_count||0,is_isolated:!1}}finally{W.value=!1}}function $(l){return l?l.length>16?l.substring(0,15)+"...":l:"—"}function re(l){if(!l)return"—";try{const e=new Date(l*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(l){if(!l)return"—";try{return new Date(l*1e3).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"—"}}function de(l){switch(l){case"high":return"danger";case"medium":return"warning";case"low":return"info";case"safe":return"success";default:return"info"}}function ce(l){switch(l){case"high":return"高危";case"medium":return"中危";case"low":return"低危";case"safe":return"安全";default:return l}}return(l,e)=>{var K;const k=y("WarningFilled"),v=y("el-icon"),_=y("el-button"),x=y("el-input"),d=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]=a=>l.$router.push("/integrations"))},{default:i(()=>[...e[5]||(e[5]=[c(" 去配置 ",-1)])]),_:1})])):f("",!0),t("div",Te,[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",Ee,[t("div",Be,[t("div",Ge,[(r(),m(he,null,be(J,a=>s(_,{key:a.key,type:b.value===a.key?"primary":"default",size:"small",onClick:zt=>ne(a.key)},{default:i(()=>[c(n(a.label),1)]),_:2},1032,["type","onClick"])),64))]),t("div",Le,[s(x,{modelValue:h.value,"onUpdate:modelValue":e[1]||(e[1]=a=>h.value=a),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]=c(" 刷新 ",-1))]),_:1})])]),b.value==="terminals"?F((r(),w(M,{key:0,data:Y.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(d,{label:"计算机名","min-width":"140"},{default:i(({row:a})=>[t("span",Se,n(a.computer_name),1)]),_:1}),s(d,{label:"IP地址",width:"130"},{default:i(({row:a})=>[c(n(a.local_ip),1)]),_:1}),s(d,{label:"分组",width:"100"},{default:i(({row:a})=>[s(p,{size:"small",effect:"plain"},{default:i(()=>[c(n(a.group_id||"—"),1)]),_:2},1024)]),_:1}),s(d,{label:"操作系统",width:"110"},{default:i(({row:a})=>[t("span",We,n($(a.os_version)),1)]),_:1}),s(d,{label:"状态",width:"80",align:"center"},{default:i(({row:a})=>[s(p,{type:a.is_online?"success":"info",size:"small",effect:"dark"},{default:i(()=>[c(n(a.is_online?"在线":"离线"),1)]),_:2},1032,["type"])]),_:1}),s(d,{label:"风险",width:"80",align:"center"},{default:i(({row:a})=>[a.risk_level?(r(),w(p,{key:0,type:de(a.risk_level),size:"small"},{default:i(()=>[c(n(ce(a.risk_level)),1)]),_:2},1032,["type"])):(r(),m("span",Pe,"—"))]),_:1}),s(d,{label:"最后活跃",width:"110"},{default:i(({row:a})=>[t("span",He,n(re(a.last_connect_time)),1)]),_:1})]),_:1},8,["data"])),[[V,E.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(d,{label:"计算机名","min-width":"140"},{default:i(({row:a})=>[t("span",Me,n(a.hostname),1)]),_:1}),s(d,{label:"IP地址",width:"130"},{default:i(({row:a})=>[c(n(a.ip_addr),1)]),_:1}),s(d,{label:"分组",width:"100"},{default:i(({row:a})=>[s(p,{size:"small",effect:"plain"},{default:i(()=>[c(n(a.group_name||a.group_id||"—"),1)]),_:2},1024)]),_:1}),s(d,{label:"操作系统",width:"110"},{default:i(({row:a})=>[t("span",Ve,n($(a.osver)),1)]),_:1}),s(d,{label:"状态",width:"80",align:"center"},{default:i(({row:a})=>[s(p,{type:a.stat===2?"success":"info",size:"small",effect:"dark"},{default:i(()=>[c(n(a.stat===2?"在线":a.stat===3?"异常":"离线"),1)]),_:2},1032,["type"])]),_:1}),s(d,{label:"客户端版本",width:"110"},{default:i(({row:a})=>[t("span",Fe,n(a.prodver||"—"),1)]),_:1})]),_:1},8,["data"])),[[V,E.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(d,{label:"计算机名","min-width":"140"},{default:i(({row:a})=>[t("span",Re,n(a.computer_name),1)]),_:1}),s(d,{label:"IP地址",width:"130"},{default:i(({row:a})=>[c(n(a.local_ip),1)]),_:1}),s(d,{label:"病毒日志数",width:"100",align:"center"},{default:i(({row:a})=>[t("span",{class:G({"text-danger":a.count>0})},n(a.count),3)]),_:1}),s(d,{label:"处理结果","min-width":"200"},{default:i(({row:a})=>[a.result?(r(),m("div",Ue,[a.result.success>0?(r(),w(p,{key:0,type:"success",size:"small",effect:"plain",style:{margin:"2px"}},{default:i(()=>[c(" 成功 "+n(a.result.success),1)]),_:2},1024)):f("",!0),a.result.fail>0?(r(),w(p,{key:1,type:"danger",size:"small",effect:"plain",style:{margin:"2px"}},{default:i(()=>[c(" 失败 "+n(a.result.fail),1)]),_:2},1024)):f("",!0),a.result.ignored>0?(r(),w(p,{key:2,type:"warning",size:"small",effect:"plain",style:{margin:"2px"}},{default:i(()=>[c(" 忽略 "+n(a.result.ignored),1)]),_:2},1024)):f("",!0),a.result.trusted>0?(r(),w(p,{key:3,type:"info",size:"small",effect:"plain",style:{margin:"2px"}},{default:i(()=>[c(" 信任 "+n(a.result.trusted),1)]),_:2},1024)):f("",!0)])):(r(),m("span",Oe,"—"))]),_:1})]),_:1},8,["data"])),[[V,E.value]]):f("",!0),t("div",Ze,[s(_e,{"current-page":T.value,"onUpdate:currentPage":e[2]||(e[2]=a=>T.value=a),"page-size":B.value,"onUpdate:pageSize":e[3]||(e[3]=a=>B.value=a),"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]=a=>S.value=a),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",Je,[e[9]||(e[9]=t("span",{class:"detail-label"},"IP地址",-1)),t("span",Ye,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",at,[e[11]||(e[11]=t("span",{class:"detail-label"},"操作系统",-1)),t("span",lt,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(()=>[c(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",dt,n(ue(o.value.last_connect_time)),1)])):f("",!0)])]),o.value.cpu||o.value.memory?(r(),m("div",ct,[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]=c(" 触发全盘扫描 ",-1))]),_:1}),s(_,{size:"small",type:o.value.is_isolated?"success":"danger",disabled:""},{default:i(()=>[s(v,null,{default:i(()=>[s(pe)]),_:1}),c(" "+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]=c(" 推送消息 ",-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-965dca2b"]]);export{Lt as default};