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
20 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,P as r,V as i,Y as a,_ as o,d as s,f as c,i as l,it as u,kt as d,l as f,p,q as m,u as h,v as g,y as _,z as ee}from"./runtime-core.esm-bundler-CnFWH3R5.js";import{n as v}from"./http-LCi9aT1G.js";import{d as y,u as b}from"./index-CfU5mW-g.js";async function x(e){let{data:t}=await v.get(`/camera-devices`,{params:e});return t}async function S(e){let{data:t}=await v.post(`/camera-devices`,e);return t}async function C(e,t){let{data:n}=await v.put(`/camera-devices/${e}`,t);return n}async function w(e){let{data:t}=await v.delete(`/camera-devices/${e}`);return t}async function T(e){let{data:t}=await v.post(`/camera-devices/${e}/retry`);return t}async function E(){let{data:e}=await v.get(`/camera-health`,{timeout:3e4});return e}async function D(e){let{data:t}=await v.get(`/camera-alerts`,{params:e});return t}async function te(e){let{data:t}=await v.post(`/camera-alerts/${e}/acknowledge`);return t}async function ne(){let{data:e}=await v.get(`/camera-monitor-settings`);return e}async function re(e){let{data:t}=await v.put(`/camera-monitor-settings`,e);return t}async function ie(e){let{data:t}=await v.get(`/camera-email-records`,{params:e});return t}var ae={class:`muted`},oe={key:0,class:`muted`},se={key:0,class:`muted`},ce={key:1},le={key:0,class:`muted`},ue={style:{"white-space":`normal`,"overflow-wrap":`anywhere`}},O=b(_({__name:`CameraAlerts`,setup(_){let b=u(`health`),O=u(!1),k=u([]),de=u([]),A=u(null),j=u(null),M=u(!1),N=u({monitor_enabled:!0,notification_enabled:!0,include_in_venue_stats:!0,sdk_port:8e3,http_port:80,channel:1,push_timeout_seconds:300}),P=u(1),fe=u(0),F=u(),I=u(!1),L=0;async function R(t=P.value){P.value=t;let n=++L;I.value=!0;try{let e=await D({page:t,page_size:20,status:F.value});if(n!==L)return;de.value=e.data??[],fe.value=e.total??0}catch(t){n===L&&e.error(t?.response?.data?.message||`加载告警记录失败`)}finally{n===L&&(I.value=!1)}}m(b,e=>{e===`alerts`&&R()});let pe=u([]),z=u(!1),B=u(1),me=u(0),V=u(),H=0;async function U(t=B.value){B.value=t;let n=++H;z.value=!0;try{let e=await ie({page:t,page_size:20,send_status:V.value});if(n!==H)return;pe.value=e.data,me.value=e.total}catch(t){n===H&&e.error(t?.response?.data?.message||`加载邮件发送记录失败`)}finally{n===H&&(z.value=!1)}}m(b,e=>{e===`emails`&&U()});let W=u([]),G=u({keyword:``}),K=u(`all`),q=u({}),J=u({}),Y=u({}),X=u(``),he=e=>({ONLINE_PUSHING:`推送正常`,PUSH_SUSPECT:`疑似停止`,PUSH_STALE:`推送停止`,NETWORK_DOWN:`网络不可达`,LOGIN_FAILED:`登录认证失败`,ARM_FAILED:`布防失败`,NO_PUSH_YET:`尚未收到推送`,SERVICE_UNAVAILABLE:`监测服务不可用`,UNKNOWN:`未知`,DISABLED:`已停用`,RECONNECTING:`重连中`})[String(e||`UNKNOWN`)]||String(e||`未知`),ge=e=>[`ONLINE_PUSHING`].includes(String(e))?`green`:[`PUSH_SUSPECT`,`RECONNECTING`].includes(String(e))?`orangered`:`red`,Z=e=>{if(!e)return`—`;let t=String(e).replace(/\.(\d{3})\d+/g,`.$1`),n=/(?:Z|[+-]\d{2}:?\d{2})$/i.test(t)?t:`${t.replace(` `,`T`)}Z`,r=new Date(n);return Number.isNaN(r.getTime())?`—`:r.toLocaleString(`zh-CN`,{timeZone:`Asia/Shanghai`})},_e=f(()=>k.value.filter(e=>{let t=!G.value.venue_id||Number(e.venue_id)===Number(G.value.venue_id),n=String(e.health?.status||`UNKNOWN`),r=K.value===`normal`?n===`ONLINE_PUSHING`:K.value===`abnormal`?[`PUSH_STALE`,`NETWORK_DOWN`,`LOGIN_FAILED`,`ARM_FAILED`,`PUSH_SUSPECT`,`NO_PUSH_YET`,`SERVICE_UNAVAILABLE`].includes(n):!G.value.status||n===G.value.status,i=G.value.keyword.trim().toLowerCase(),a=!i||`${e.name} ${e.ip} ${e.venue_name||e.venue?.name||``}`.toLowerCase().includes(i);return t&&r&&a}).sort((e,t)=>{let n=e=>({SERVICE_UNAVAILABLE:0,LOGIN_FAILED:1,ARM_FAILED:2,NETWORK_DOWN:3,PUSH_STALE:4,PUSH_SUSPECT:5,NO_PUSH_YET:6,UNKNOWN:7,RECONNECTING:8,ONLINE_PUSHING:9})[String(e||`UNKNOWN`)]??7;return n(e.health?.status)-n(t.health?.status)}));async function ve(){try{let{data:e}=await v.get(`/venues`);W.value=Array.isArray(e)?e:[]}catch{W.value=[]}}async function Q(){O.value=!0;try{let[e,t,n]=await Promise.all([E(),x({page_size:100}),ne()]);k.value=e.devices??t.data??[],Y.value=e.summary?.byStatus??{},A.value={...n,repeat_notification_enabled:n.repeat_notification_enabled??!1,repeat_notification_interval_hours:n.repeat_notification_interval_hours??24,notification_start_time:String(n.notification_start_time||``).slice(0,5),notification_end_time:String(n.notification_end_time||``).slice(0,5)},X.value=(n.recipient_emails||[]).join(`,`)}catch(t){e.error(t?.response?.data?.message||t?.message||`加载摄像头预警数据失败`)}finally{O.value=!1}}function ye(){j.value=null,N.value={monitor_enabled:!0,notification_enabled:!0,include_in_venue_stats:!0,sdk_port:8e3,http_port:80,channel:1,push_timeout_seconds:A.value?.default_push_timeout_seconds??300},M.value=!0}function be(e){j.value=e,N.value={...e,password:``},M.value=!0}async function xe(){try{j.value?await C(j.value.id,N.value):await S(N.value),e.success(`已保存`),M.value=!1,await Q()}catch(t){e.error(t?.response?.data?.message||t?.message||`保存失败`)}}async function Se(t){q.value[t.id]||y.confirm({title:`确认重新连接`,content:`请确认摄像头已正常在线或已经重启,再重新链接。`,okText:`确认重新连接`,cancelText:`关闭`,onOk:async()=>{q.value[t.id]=!0;try{await T(t.id),e.success(`重试指令已下发,正在等待登录、布防和客流推送验证`),await new Promise(e=>setTimeout(e,5e3)),await Q(),q.value[t.id]=!1}catch(n){q.value[t.id]=!1,e.error(n?.response?.data?.message||n?.message||`重试失败`)}}})}async function Ce(t){y.confirm({title:`停用摄像头`,content:`确定停用 ${t.name}(${t.ip})吗?`,okText:`确认停用`,cancelText:`关闭`,onOk:async()=>{await w(t.id),e.success(`已停用`),await Q()}})}async function we(t){if(!J.value[t.id]){J.value[t.id]=!0;try{await te(t.id),e.success(`已确认`),await R()}catch(t){let n=t?.response?.status;e.error(n===429?`操作过于频繁,请稍后再试`:t?.response?.data?.message||t?.message||`确认处理失败`)}finally{J.value[t.id]=!1}}}async function Te(){A.value&&(A.value.recipient_emails=X.value.split(`,`).map(e=>e.trim()).filter(Boolean),await re(A.value),e.success(`通知设置已保存`))}let $;return n(()=>{Promise.all([Q(),ve()]),$=setInterval(()=>{if(b.value===`alerts`){I.value||R();return}if(b.value===`emails`){z.value||U();return}b.value!==`settings`&&!O.value&&!Object.values(q.value).some(Boolean)&&Q()},6e4)}),r(()=>{$&&clearInterval($)}),(e,n)=>{let r=i(`a-tag`),u=i(`a-input`),f=i(`a-option`),m=i(`a-select`),_=i(`a-button`),v=i(`a-space`),y=i(`a-table-column`),x=i(`a-table`),S=i(`a-tab-pane`),C=i(`a-form-item`),w=i(`a-time-picker`),T=i(`a-switch`),E=i(`a-input-number`),D=i(`a-form`),te=i(`a-tabs`),ne=i(`a-card`),re=i(`a-input-password`),ie=i(`a-modal`);return t(),p(l,null,[g(ne,{title:`场馆管理 / 摄像头预警`},{default:a(()=>[g(te,{"active-key":b.value,"onUpdate:activeKey":n[19]||=e=>b.value=e},{default:a(()=>[g(S,{key:`health`,title:`实时状态`},{default:a(()=>[g(v,{wrap:``,size:12,style:{"margin-bottom":`12px`}},{default:a(()=>[g(r,{color:`green`,class:`clickable-tag`,onClick:n[0]||=e=>{K.value=`normal`,G.value.status=void 0}},{default:a(()=>[o(`正常 `+d(Y.value.ONLINE_PUSHING||0),1)]),_:1}),g(r,{color:`red`,class:`clickable-tag`,onClick:n[1]||=e=>{K.value=`abnormal`,G.value.status=void 0}},{default:a(()=>[o(`异常 `+d((Y.value.PUSH_STALE||0)+(Y.value.NETWORK_DOWN||0)+(Y.value.LOGIN_FAILED||0)+(Y.value.ARM_FAILED||0)+(Y.value.NO_PUSH_YET||0)+(Y.value.SERVICE_UNAVAILABLE||0)),1)]),_:1}),g(r,{class:`clickable-tag`,onClick:n[2]||=e=>{K.value=`all`,G.value.status=void 0}},{default:a(()=>[o(`总数 `+d(k.value.length),1)]),_:1}),g(u,{modelValue:G.value.keyword,"onUpdate:modelValue":n[3]||=e=>G.value.keyword=e,"allow-clear":``,placeholder:`搜索摄像头名称或 IP`,style:{width:`240px`}},null,8,[`modelValue`]),g(m,{modelValue:G.value.venue_id,"onUpdate:modelValue":n[4]||=e=>G.value.venue_id=e,"allow-clear":``,"allow-search":``,placeholder:`按场馆筛选`,style:{width:`220px`}},{default:a(()=>[(t(!0),p(l,null,ee(W.value,e=>(t(),s(f,{key:e.id,value:e.id},{default:a(()=>[o(d(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`]),g(m,{modelValue:G.value.status,"onUpdate:modelValue":n[5]||=e=>G.value.status=e,"allow-clear":``,"allow-search":``,placeholder:`按状态筛选`,style:{width:`160px`},onChange:n[6]||=e=>K.value=`all`},{default:a(()=>[g(f,{value:`ONLINE_PUSHING`},{default:a(()=>[...n[32]||=[o(`推送正常`,-1)]]),_:1}),g(f,{value:`PUSH_STALE`},{default:a(()=>[...n[33]||=[o(`推送停止`,-1)]]),_:1}),g(f,{value:`NETWORK_DOWN`},{default:a(()=>[...n[34]||=[o(`网络断开`,-1)]]),_:1}),g(f,{value:`LOGIN_FAILED`},{default:a(()=>[...n[35]||=[o(`登录失败`,-1)]]),_:1}),g(f,{value:`ARM_FAILED`},{default:a(()=>[...n[36]||=[o(`布防失败`,-1)]]),_:1}),g(f,{value:`NO_PUSH_YET`},{default:a(()=>[...n[37]||=[o(`尚未收到推送`,-1)]]),_:1}),g(f,{value:`SERVICE_UNAVAILABLE`},{default:a(()=>[...n[38]||=[o(`监测服务不可用`,-1)]]),_:1}),g(f,{value:`UNKNOWN`},{default:a(()=>[...n[39]||=[o(`未知`,-1)]]),_:1})]),_:1},8,[`modelValue`]),g(_,{onClick:Q,loading:O.value},{default:a(()=>[...n[40]||=[o(`刷新`,-1)]]),_:1},8,[`loading`]),g(_,{type:`primary`,onClick:ye},{default:a(()=>[...n[41]||=[o(`新增摄像头`,-1)]]),_:1})]),_:1}),g(x,{data:_e.value,loading:O.value,"row-key":`id`,pagination:!1},{columns:a(()=>[g(y,{title:`场馆`},{cell:a(({record:e})=>[o(d(e.venue?.name||e.venue_name||`未绑定`),1)]),_:1}),g(y,{title:`摄像头`},{cell:a(({record:e})=>[o(d(e.name),1),h(`div`,ae,d(e.ip)+` / 通道 `+d(e.channel),1)]),_:1}),g(y,{title:`状态`},{cell:a(({record:e})=>[g(r,{color:ge(e.health?.status)},{default:a(()=>[o(d(he(e.health?.status)),1)]),_:2},1032,[`color`])]),_:1}),g(y,{title:`最后推送`,width:190},{cell:a(({record:e})=>[o(d(Z(e.health?.last_pdc_at_source||e.health?.last_pdc_at)),1)]),_:1}),g(y,{title:`网络连通性`,width:140},{cell:a(({record:e})=>[o(d(e.health?.tcp_reachable===!0?`网络正常`:e.health?.tcp_reachable===!1?`网络不可达`:`未检测`),1)]),_:1}),g(y,{title:`操作`},{cell:a(({record:e})=>[g(v,null,{default:a(()=>[g(_,{size:`small`,onClick:t=>be(e)},{default:a(()=>[...n[42]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),g(_,{size:`small`,type:`primary`,loading:q.value[e.id],disabled:q.value[e.id],onClick:t=>Se(e)},{default:a(()=>[o(d(q.value[e.id]?`重新连接中`:`重新连接`),1)]),_:2},1032,[`loading`,`disabled`,`onClick`]),g(_,{size:`small`,status:`danger`,onClick:t=>Ce(e)},{default:a(()=>[...n[43]||=[o(`停用`,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]),_:1})]),_:1},8,[`data`,`loading`])]),_:1}),g(S,{key:`alerts`,title:`处理告警`},{default:a(()=>[g(v,{size:12,style:{"margin-bottom":`16px`}},{default:a(()=>[g(m,{modelValue:F.value,"onUpdate:modelValue":n[7]||=e=>F.value=e,"allow-clear":``,placeholder:`全部处理状态`,style:{width:`200px`},onChange:n[8]||=e=>R(1)},{default:a(()=>[g(f,{value:`OPEN`},{default:a(()=>[...n[44]||=[o(`待处理`,-1)]]),_:1}),g(f,{value:`ACKNOWLEDGED`},{default:a(()=>[...n[45]||=[o(`已人工确认`,-1)]]),_:1}),g(f,{value:`RESOLVED`},{default:a(()=>[...n[46]||=[o(`已自动恢复`,-1)]]),_:1})]),_:1},8,[`modelValue`]),g(_,{loading:I.value,onClick:n[9]||=e=>R()},{default:a(()=>[...n[47]||=[o(`刷新`,-1)]]),_:1},8,[`loading`])]),_:1}),g(x,{data:de.value,loading:I.value,"row-key":`id`,scroll:{x:1450},pagination:{current:P.value,pageSize:20,total:fe.value,showTotal:!0},onPageChange:R},{columns:a(()=>[g(y,{title:`告警时间`,width:190},{cell:a(({record:e})=>[o(d(Z(e.first_occurred_at)),1)]),_:1}),g(y,{title:`场馆`,width:190},{cell:a(({record:e})=>[o(d(e.venue?.name||e.camera?.venue_name||`—`),1)]),_:1}),g(y,{title:`设备`,width:220},{cell:a(({record:e})=>[o(d(e.camera?.name||`—`),1),e.camera?(t(),p(`div`,oe,d(e.camera.ip)+` / 通道 `+d(e.camera.channel),1)):c(``,!0)]),_:1}),g(y,{title:`原因`,"data-index":`reason`,width:300}),g(y,{title:`处理状态`,width:140},{cell:a(({record:e})=>[g(r,{color:e.status===`OPEN`?`red`:e.status===`RESOLVED`?`green`:`blue`},{default:a(()=>[o(d({OPEN:`待处理`,ACKNOWLEDGED:`已人工确认`,RESOLVED:`已自动恢复`}[e.status]||e.status),1)]),_:2},1032,[`color`])]),_:1}),g(y,{title:`处理时间`,width:220},{cell:a(({record:e})=>[o(d(Z(e.status===`RESOLVED`?e.recovered_at:e.acknowledged_at)),1),e.status===`RESOLVED`&&e.acknowledged_at?(t(),p(`div`,se,`人工确认:`+d(Z(e.acknowledged_at)),1)):c(``,!0)]),_:1}),g(y,{title:`操作`,width:140},{cell:a(({record:e})=>[e.status===`OPEN`?(t(),s(_,{key:0,size:`small`,loading:J.value[e.id],disabled:J.value[e.id],onClick:t=>we(e)},{default:a(()=>[...n[48]||=[o(`确认处理`,-1)]]),_:1},8,[`loading`,`disabled`,`onClick`])):(t(),p(`span`,ce,`—`))]),_:1})]),_:1},8,[`data`,`loading`,`pagination`]),n[49]||=h(`div`,{class:`form-help`},`默认保留并显示全部告警记录。已人工确认不代表设备恢复;恢复推送后自动标记为已自动恢复,并保留原人工确认时间。时间按北京时间显示。`,-1)]),_:1}),g(S,{key:`settings`,title:`通知设置`},{default:a(()=>[A.value?(t(),s(D,{key:0,model:A.value,layout:`vertical`,style:{"max-width":`680px`}},{default:a(()=>[g(C,{label:`接收邮箱`},{default:a(()=>[g(u,{modelValue:X.value,"onUpdate:modelValue":n[10]||=e=>X.value=e,placeholder:`多个邮箱用逗号分隔`},null,8,[`modelValue`])]),_:1}),g(C,{label:`通知开始时间`},{default:a(()=>[g(w,{modelValue:A.value.notification_start_time,"onUpdate:modelValue":n[11]||=e=>A.value.notification_start_time=e,format:`HH:mm`},null,8,[`modelValue`])]),_:1}),g(C,{label:`通知结束时间`},{default:a(()=>[g(w,{modelValue:A.value.notification_end_time,"onUpdate:modelValue":n[12]||=e=>A.value.notification_end_time=e,format:`HH:mm`},null,8,[`modelValue`])]),_:1}),g(C,{label:`持续异常重复邮件提醒`},{default:a(()=>[g(T,{modelValue:A.value.repeat_notification_enabled,"onUpdate:modelValue":n[13]||=e=>A.value.repeat_notification_enabled=e},null,8,[`modelValue`]),n[50]||=h(`div`,{class:`form-help`},`开启后,摄像头持续异常且仍需人工处理时,按设定间隔再次发送邮件。确认处理不会停止提醒,恢复推送后自动停止。`,-1)]),_:1}),A.value.repeat_notification_enabled?(t(),s(C,{key:0,label:`重复通知间隔(小时)`},{default:a(()=>[g(E,{modelValue:A.value.repeat_notification_interval_hours,"onUpdate:modelValue":n[14]||=e=>A.value.repeat_notification_interval_hours=e,min:1,max:8760,precision:0},null,8,[`modelValue`]),n[51]||=h(`div`,{class:`form-help`},`默认 24 小时,从上次成功发送邮件开始计算;到期不在通知时间段内,将顺延至允许发送时段。不会发送恢复通知。`,-1)]),_:1})):c(``,!0),g(C,{label:`客流推送超时时间`},{default:a(()=>[g(E,{modelValue:A.value.default_push_timeout_seconds,"onUpdate:modelValue":n[15]||=e=>A.value.default_push_timeout_seconds=e,min:60,max:86400},null,8,[`modelValue`]),n[52]||=h(`div`,{class:`form-help`},`超过这个时间没有收到该摄像头的客流数据,系统会判定为推送异常,并继续进行自动重连判断。单位:秒。`,-1)]),_:1}),g(C,null,{default:a(()=>[g(_,{type:`primary`,onClick:Te},{default:a(()=>[...n[53]||=[o(`保存设置`,-1)]]),_:1})]),_:1})]),_:1},8,[`model`])):c(``,!0)]),_:1}),g(S,{key:`emails`,title:`邮件发送记录`},{default:a(()=>[g(v,{size:12,style:{"margin-bottom":`16px`}},{default:a(()=>[g(m,{modelValue:V.value,"onUpdate:modelValue":n[16]||=e=>V.value=e,"allow-clear":``,placeholder:`全部发送结果`,style:{width:`180px`},onChange:n[17]||=e=>U(1)},{default:a(()=>[g(f,{value:`sent`},{default:a(()=>[...n[54]||=[o(`发送成功`,-1)]]),_:1}),g(f,{value:`failed`},{default:a(()=>[...n[55]||=[o(`发送失败`,-1)]]),_:1}),g(f,{value:`pending`},{default:a(()=>[...n[56]||=[o(`待发送`,-1)]]),_:1})]),_:1},8,[`modelValue`]),g(_,{loading:z.value,onClick:n[18]||=e=>U()},{default:a(()=>[...n[57]||=[o(`刷新`,-1)]]),_:1},8,[`loading`])]),_:1}),g(x,{data:pe.value,loading:z.value,"row-key":`id`,scroll:{x:1300},pagination:{current:B.value,pageSize:20,total:me.value,showTotal:!0},onPageChange:U},{columns:a(()=>[g(y,{title:`发送时间`,width:190},{cell:a(({record:e})=>[o(d(Z(e.sent_at||e.created_at)),1)]),_:1}),g(y,{title:`场馆`,width:200},{cell:a(({record:e})=>[o(d(e.alert?.venue?.name||e.alert?.camera?.venue_name||`—`),1)]),_:1}),g(y,{title:`摄像头`,width:230},{cell:a(({record:e})=>[o(d(e.alert?.camera?.name||`—`),1),e.alert?.camera?(t(),p(`div`,le,d(e.alert.camera.ip)+` / 通道 `+d(e.alert.camera.channel),1)):c(``,!0)]),_:1}),g(y,{title:`收件邮箱`,"data-index":`receiver`,width:230}),g(y,{title:`发送结果`,width:120},{cell:a(({record:e})=>[g(r,{color:e.send_status===`sent`?`green`:e.send_status===`failed`?`red`:`gray`},{default:a(()=>[o(d({sent:`发送成功`,failed:`发送失败`,pending:`待发送`}[e.send_status]||e.send_status),1)]),_:2},1032,[`color`])]),_:1}),g(y,{title:`失败原因`,width:330},{cell:a(({record:e})=>[h(`div`,ue,d(e.error_message||`—`),1)]),_:1})]),_:1},8,[`data`,`loading`,`pagination`]),n[58]||=h(`div`,{class:`form-help`},`时间按北京时间显示;发送失败时显示尝试时间。发送成功表示邮件服务器已接受发送,不代表收件人已阅读。首次和重复发送均会记录。`,-1)]),_:1})]),_:1},8,[`active-key`])]),_:1}),g(ie,{visible:M.value,"onUpdate:visible":n[31]||=e=>M.value=e,title:j.value?`编辑摄像头`:`新增摄像头`,height:640,"body-style":{maxHeight:`520px`,overflowY:`auto`},onOk:xe},{default:a(()=>[g(D,{model:N.value,layout:`vertical`},{default:a(()=>[g(C,{label:`名称`},{default:a(()=>[g(u,{modelValue:N.value.name,"onUpdate:modelValue":n[20]||=e=>N.value.name=e},null,8,[`modelValue`])]),_:1}),g(C,{label:`所属场馆`},{default:a(()=>[g(m,{modelValue:N.value.venue_id,"onUpdate:modelValue":n[21]||=e=>N.value.venue_id=e,"allow-clear":``,"allow-search":``,placeholder:`请输入或选择场馆`},{default:a(()=>[(t(!0),p(l,null,ee(W.value,e=>(t(),s(f,{key:e.id,value:e.id},{default:a(()=>[o(d(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),g(C,{label:`IP/域名`},{default:a(()=>[g(u,{modelValue:N.value.ip,"onUpdate:modelValue":n[22]||=e=>N.value.ip=e},null,8,[`modelValue`])]),_:1}),g(C,{label:`SDK 端口`},{default:a(()=>[g(E,{modelValue:N.value.sdk_port,"onUpdate:modelValue":n[23]||=e=>N.value.sdk_port=e},null,8,[`modelValue`])]),_:1}),g(C,{label:`通道`},{default:a(()=>[g(E,{modelValue:N.value.channel,"onUpdate:modelValue":n[24]||=e=>N.value.channel=e,min:1},null,8,[`modelValue`])]),_:1}),g(C,{label:`设备槽位`},{default:a(()=>[g(E,{modelValue:N.value.device_slot,"onUpdate:modelValue":n[25]||=e=>N.value.device_slot=e},null,8,[`modelValue`])]),_:1}),g(C,{label:`用户名`},{default:a(()=>[g(u,{modelValue:N.value.username,"onUpdate:modelValue":n[26]||=e=>N.value.username=e},null,8,[`modelValue`])]),_:1}),g(C,{label:`密码`},{default:a(()=>[g(re,{modelValue:N.value.password,"onUpdate:modelValue":n[27]||=e=>N.value.password=e,placeholder:`编辑时留空表示不修改`},null,8,[`modelValue`])]),_:1}),g(C,{label:`客流推送超时时间`},{default:a(()=>[g(E,{modelValue:N.value.push_timeout_seconds,"onUpdate:modelValue":n[28]||=e=>N.value.push_timeout_seconds=e,min:60},null,8,[`modelValue`]),n[59]||=h(`div`,{class:`form-help`},`该摄像头超过设定时间没有客流数据时,系统会判定推送异常。单位:秒。`,-1)]),_:1}),g(C,{label:`监测`},{default:a(()=>[g(T,{modelValue:N.value.monitor_enabled,"onUpdate:modelValue":n[29]||=e=>N.value.monitor_enabled=e},null,8,[`modelValue`])]),_:1}),g(C,{label:`发送人工介入邮件`},{default:a(()=>[g(T,{modelValue:N.value.notification_enabled,"onUpdate:modelValue":n[30]||=e=>N.value.notification_enabled=e},null,8,[`modelValue`])]),_:1})]),_:1},8,[`model`])]),_:1},8,[`visible`,`title`])],64)}}}),[[`__scopeId`,`data-v-09d75206`]]);export{O as default};