You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
9.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import{n as e}from"./axios-CiYFffbI.js";import{I as t,N as n,V as r,Y as i,_ as a,d as o,f as s,i as c,it as l,kt as u,l as d,p as f,u as p,v as m,y as h}from"./runtime-core.esm-bundler-CnFWH3R5.js";import{n as g}from"./http-LCi9aT1G.js";import{d as _,u as v}from"./index-7ogmrLc0.js";async function y(e){let{data:t}=await g.get(`/camera-devices`,{params:e});return t}async function b(e){let{data:t}=await g.post(`/camera-devices`,e);return t}async function x(e,t){let{data:n}=await g.put(`/camera-devices/${e}`,t);return n}async function S(e){let{data:t}=await g.delete(`/camera-devices/${e}`);return t}async function C(e){let{data:t}=await g.post(`/camera-devices/${e}/retry`);return t}async function w(){let{data:e}=await g.get(`/camera-health`);return e}async function T(e){let{data:t}=await g.get(`/camera-alerts`,{params:e});return t}async function E(e){let{data:t}=await g.post(`/camera-alerts/${e}/acknowledge`);return t}async function D(){let{data:e}=await g.get(`/camera-monitor-settings`);return e}async function O(e){let{data:t}=await g.put(`/camera-monitor-settings`,e);return t}var k={class:`muted`},A=v(h({__name:`CameraAlerts`,setup(h){let g=l(`health`),v=l(!1),A=l([]),j=l([]),M=l(null),N=l(null),P=l(!1),F=l({monitor_enabled:!0,notification_enabled:!0,include_in_venue_stats:!0,sdk_port:8e3,http_port:80,channel:1,push_timeout_seconds:300}),I=l({}),L=l(``),R=e=>({ONLINE_PUSHING:`推送正常`,PUSH_SUSPECT:`疑似停止`,PUSH_STALE:`推送停止`,NETWORK_DOWN:`网络断开`,LOGIN_FAILED:`登录失败`,ARM_FAILED:`布防失败`,UNKNOWN:`未知`,DISABLED:`已停用`,RECONNECTING:`重连中`})[String(e||`UNKNOWN`)]||String(e||`未知`),z=e=>[`ONLINE_PUSHING`].includes(String(e))?`green`:[`PUSH_SUSPECT`,`RECONNECTING`].includes(String(e))?`orangered`:`red`,B=e=>e?new Date(e).toLocaleString(`zh-CN`):`—`,V=d(()=>A.value);async function H(){v.value=!0;try{let[e,t,n,r]=await Promise.all([w(),T({status:`OPEN`,page_size:100}),y({page_size:100}),D()]);A.value=e.devices??n.data??[],I.value=e.summary?.byStatus??{},j.value=t.data??[],M.value={...r,notification_start_time:String(r.notification_start_time||``).slice(0,5),notification_end_time:String(r.notification_end_time||``).slice(0,5)},L.value=(r.recipient_emails||[]).join(`,`)}catch(t){e.error(t?.response?.data?.message||t?.message||`加载摄像头预警数据失败`)}finally{v.value=!1}}function U(){N.value=null,F.value={monitor_enabled:!0,notification_enabled:!0,include_in_venue_stats:!0,sdk_port:8e3,http_port:80,channel:1,push_timeout_seconds:M.value?.default_push_timeout_seconds??300},P.value=!0}function W(e){N.value=e,F.value={...e,password:``},P.value=!0}async function G(){try{N.value?await x(N.value.id,F.value):await b(F.value),e.success(`已保存`),P.value=!1,await H()}catch(t){e.error(t?.response?.data?.message||t?.message||`保存失败`)}}async function K(t){try{await C(t.id),e.success(`重试指令已下发,等待新的客流推送验证`),await H()}catch(t){e.error(t?.response?.data?.message||t?.message||`重试失败`)}}async function q(t){_.warning({title:`停用摄像头`,content:`确定停用 ${t.name}(${t.ip})吗?`,onOk:async()=>{await S(t.id),e.success(`已停用`),await H()}})}async function J(t){await E(t.id),e.success(`已确认`),await H()}async function Y(){M.value&&(M.value.recipient_emails=L.value.split(`,`).map(e=>e.trim()).filter(Boolean),await O(M.value),e.success(`通知设置已保存`))}return n(H),(e,n)=>{let l=r(`a-tag`),d=r(`a-button`),h=r(`a-space`),_=r(`a-table-column`),y=r(`a-table`),b=r(`a-tab-pane`),x=r(`a-input`),S=r(`a-form-item`),C=r(`a-time-picker`),w=r(`a-input-number`),T=r(`a-form`),E=r(`a-tabs`),D=r(`a-card`),O=r(`a-input-password`),X=r(`a-switch`),Z=r(`a-modal`);return t(),f(c,null,[m(D,{title:`场馆管理 / 摄像头预警`},{default:i(()=>[m(E,{"active-key":g.value,"onUpdate:activeKey":n[4]||=e=>g.value=e},{default:i(()=>[m(b,{key:`health`,title:`实时状态`},{default:i(()=>[m(h,{wrap:``,style:{"margin-bottom":`12px`}},{default:i(()=>[m(l,{color:`green`},{default:i(()=>[a(`正常 `+u(I.value.ONLINE_PUSHING||0),1)]),_:1}),m(l,{color:`red`},{default:i(()=>[a(`异常 `+u((I.value.PUSH_STALE||0)+(I.value.NETWORK_DOWN||0)+(I.value.LOGIN_FAILED||0)+(I.value.ARM_FAILED||0)),1)]),_:1}),m(l,null,{default:i(()=>[a(`总数 `+u(A.value.length),1)]),_:1}),m(d,{onClick:H,loading:v.value},{default:i(()=>[...n[17]||=[a(`刷新`,-1)]]),_:1},8,[`loading`]),m(d,{type:`primary`,onClick:U},{default:i(()=>[...n[18]||=[a(`新增摄像头`,-1)]]),_:1})]),_:1}),m(y,{data:V.value,loading:v.value,"row-key":`id`,pagination:!1},{columns:i(()=>[m(_,{title:`场馆`},{cell:i(({record:e})=>[a(u(e.venue?.name||e.venue_name||`未绑定`),1)]),_:1}),m(_,{title:`摄像头`},{cell:i(({record:e})=>[a(u(e.name),1),p(`div`,k,u(e.ip)+` / 通道 `+u(e.channel),1)]),_:1}),m(_,{title:`状态`},{cell:i(({record:e})=>[m(l,{color:z(e.health?.status)},{default:i(()=>[a(u(R(e.health?.status)),1)]),_:2},1032,[`color`])]),_:1}),m(_,{title:`最后推送`},{cell:i(({record:e})=>[a(u(B(e.health?.last_pdc_at)),1)]),_:1}),m(_,{title:`TCP`},{cell:i(({record:e})=>[a(u(e.health?.tcp_reachable===!0?`可达`:e.health?.tcp_reachable===!1?`不可达`:`—`),1)]),_:1}),m(_,{title:`操作`},{cell:i(({record:e})=>[m(h,null,{default:i(()=>[m(d,{size:`small`,onClick:t=>W(e)},{default:i(()=>[...n[19]||=[a(`编辑`,-1)]]),_:1},8,[`onClick`]),m(d,{size:`small`,type:`primary`,onClick:t=>K(e)},{default:i(()=>[...n[20]||=[a(`重新连接`,-1)]]),_:1},8,[`onClick`]),m(d,{size:`small`,status:`danger`,onClick:t=>q(e)},{default:i(()=>[...n[21]||=[a(`停用`,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]),_:1})]),_:1},8,[`data`,`loading`])]),_:1}),m(b,{key:`alerts`,title:`待处理告警`},{default:i(()=>[m(y,{data:j.value,pagination:!1},{columns:i(()=>[m(_,{title:`时间`,"data-index":`first_occurred_at`}),m(_,{title:`场馆`},{cell:i(({record:e})=>[a(u(e.venue?.name||`—`),1)]),_:1}),m(_,{title:`设备`},{cell:i(({record:e})=>[a(u(e.camera?.name)+`(`+u(e.camera?.ip)+`)`,1)]),_:1}),m(_,{title:`原因`,"data-index":`reason`}),m(_,{title:`操作`},{cell:i(({record:e})=>[m(d,{size:`small`,onClick:t=>J(e)},{default:i(()=>[...n[22]||=[a(`确认处理`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])]),_:1}),m(b,{key:`settings`,title:`通知设置`},{default:i(()=>[M.value?(t(),o(T,{key:0,model:M.value,layout:`vertical`,style:{"max-width":`680px`}},{default:i(()=>[m(S,{label:`接收邮箱`},{default:i(()=>[m(x,{modelValue:L.value,"onUpdate:modelValue":n[0]||=e=>L.value=e,placeholder:`多个邮箱用逗号分隔`},null,8,[`modelValue`])]),_:1}),m(S,{label:`通知开始时间`},{default:i(()=>[m(C,{modelValue:M.value.notification_start_time,"onUpdate:modelValue":n[1]||=e=>M.value.notification_start_time=e,format:`HH:mm`},null,8,[`modelValue`])]),_:1}),m(S,{label:`通知结束时间`},{default:i(()=>[m(C,{modelValue:M.value.notification_end_time,"onUpdate:modelValue":n[2]||=e=>M.value.notification_end_time=e,format:`HH:mm`},null,8,[`modelValue`])]),_:1}),m(S,{label:`推送超时(秒)`},{default:i(()=>[m(w,{modelValue:M.value.default_push_timeout_seconds,"onUpdate:modelValue":n[3]||=e=>M.value.default_push_timeout_seconds=e,min:60,max:86400},null,8,[`modelValue`])]),_:1}),m(S,null,{default:i(()=>[m(d,{type:`primary`,onClick:Y},{default:i(()=>[...n[23]||=[a(`保存设置`,-1)]]),_:1})]),_:1})]),_:1},8,[`model`])):s(``,!0)]),_:1})]),_:1},8,[`active-key`])]),_:1}),m(Z,{visible:P.value,"onUpdate:visible":n[16]||=e=>P.value=e,title:N.value?`编辑摄像头`:`新增摄像头`,onOk:G},{default:i(()=>[m(T,{model:F.value,layout:`vertical`},{default:i(()=>[m(S,{label:`名称`},{default:i(()=>[m(x,{modelValue:F.value.name,"onUpdate:modelValue":n[5]||=e=>F.value.name=e},null,8,[`modelValue`])]),_:1}),m(S,{label:`所属场馆 ID`},{default:i(()=>[m(w,{modelValue:F.value.venue_id,"onUpdate:modelValue":n[6]||=e=>F.value.venue_id=e},null,8,[`modelValue`])]),_:1}),m(S,{label:`IP/域名`},{default:i(()=>[m(x,{modelValue:F.value.ip,"onUpdate:modelValue":n[7]||=e=>F.value.ip=e},null,8,[`modelValue`])]),_:1}),m(S,{label:`SDK 端口`},{default:i(()=>[m(w,{modelValue:F.value.sdk_port,"onUpdate:modelValue":n[8]||=e=>F.value.sdk_port=e},null,8,[`modelValue`])]),_:1}),m(S,{label:`通道`},{default:i(()=>[m(w,{modelValue:F.value.channel,"onUpdate:modelValue":n[9]||=e=>F.value.channel=e,min:1},null,8,[`modelValue`])]),_:1}),m(S,{label:`设备槽位`},{default:i(()=>[m(w,{modelValue:F.value.device_slot,"onUpdate:modelValue":n[10]||=e=>F.value.device_slot=e},null,8,[`modelValue`])]),_:1}),m(S,{label:`用户名`},{default:i(()=>[m(x,{modelValue:F.value.username,"onUpdate:modelValue":n[11]||=e=>F.value.username=e},null,8,[`modelValue`])]),_:1}),m(S,{label:`密码`},{default:i(()=>[m(O,{modelValue:F.value.password,"onUpdate:modelValue":n[12]||=e=>F.value.password=e,placeholder:`编辑时留空表示不修改`},null,8,[`modelValue`])]),_:1}),m(S,{label:`推送超时(秒)`},{default:i(()=>[m(w,{modelValue:F.value.push_timeout_seconds,"onUpdate:modelValue":n[13]||=e=>F.value.push_timeout_seconds=e,min:60},null,8,[`modelValue`])]),_:1}),m(S,{label:`监测`},{default:i(()=>[m(X,{modelValue:F.value.monitor_enabled,"onUpdate:modelValue":n[14]||=e=>F.value.monitor_enabled=e},null,8,[`modelValue`])]),_:1}),m(S,{label:`发送人工介入邮件`},{default:i(()=>[m(X,{modelValue:F.value.notification_enabled,"onUpdate:modelValue":n[15]||=e=>F.value.notification_enabled=e},null,8,[`modelValue`])]),_:1})]),_:1},8,[`model`])]),_:1},8,[`visible`,`title`])],64)}}}),[[`__scopeId`,`data-v-ece80988`]]);export{A as default};