PageSourceSearch

https://114jht.com/school/js/2094.452ce07b.js

js 114jht.com collected 2026-10-09 04:28:29 UTC 36,920 bytes, 1 lines download raw bytes

1"use strict";(self["webpackChunkele_admin_template"]=self["webpackChunkele_admin_template"]||[]).push([[2094,10878,81013,79462,11743],{10878:function(e,t,a){a.r(t),a.d(t,{default:function(){return d}});var r=function(){var e=this,t=e._self._c;return t("ele-modal",{attrs:{width:"560px",visible:e.visible,"close-on-click-modal":!1,title:e.isUpdate?"编辑摄像机":"新增摄像机"},on:{"update:visible":e.updateVisible},scopedSlots:e._u([{key:"footer",fn:function(){return[t("el-button",{on:{click:function(t){return e.updateVisible(!1)}}},[e._v("取消")]),t("el-button",{attrs:{type:"primary",loading:e.loading},on:{click:e.save}},[e._v("保存")])]},proxy:!0}])},[t("el-form",{ref:"form",attrs:{model:e.form,rules:e.rules,"label-suffix":":","label-width":"130px"}},[t("el-form-item",{attrs:{label:"所属设备组",prop:"passageGroupId"}},[t("el-select",{staticClass:"ele-block",attrs:{placeholder:"请选择所属设备组"},model:{value:e.form.passageGroupId,callback:function(t){e.$set(e.form,"passageGroupId",t)},expression:"form.passageGroupId"}},e._l(e.groupOptions,(function(e){return t("el-option",{key:e.id,attrs:{label:e.name,value:e.id}})})),1)],1),t("el-form-item",{attrs:{label:"摄像机名称",prop:"cameraName"}},[t("el-input",{attrs:{clearable:"",maxlength:"50",placeholder:"请输入摄像机名称"},model:{value:e.form.cameraName,callback:function(t){e.$set(e.form,"cameraName",t)},expression:"form.cameraName"}})],1),t("el-form-item",{attrs:{label:"摄像机序列号",prop:"cameraSn"}},[t("el-input",{attrs:{clearable:"",maxlength:"64",placeholder:"请输入摄像机序列号"},model:{value:e.form.cameraSn,callback:function(t){e.$set(e.form,"cameraSn",t)},expression:"form.cameraSn"}})],1),t("el-form-item",{attrs:{label:"IP地址",prop:"ipAddress"}},[t("el-input",{attrs:{clearable:"",maxlength:"64",placeholder:"请输入IP地址"},model:{value:e.form.ipAddress,callback:function(t){e.$set(e.form,"ipAddress",t)},expression:"form.ipAddress"}})],1),t("el-row",{attrs:{gutter:10}},[t("el-col",{attrs:{span:12}},[t("el-form-item",{attrs:{label:"RTSP端口",prop:"rtspPort","label-width":"90px"}},[t("el-input-number",{staticClass:"ele-fluid ele-text-left",attrs:{min:1,max:65535,"controls-position":"right",placeholder:"如554"},model:{value:e.form.rtspPort,callback:function(t){e.$set(e.form,"rtspPort",t)},expression:"form.rtspPort"}})],1)],1),t("el-col",{attrs:{span:12}},[t("el-form-item",{attrs:{label:"分辨率",prop:"resolution","label-width":"70px"}},[t("el-select",{staticClass:"ele-block",attrs:{clearable:"",filterable:"","allow-create":"","default-first-option":"",placeholder:"请选择或输入"},model:{value:e.form.resolution,callback:function(t){e.$set(e.form,"resolution",t)},expression:"form.resolution"}},e._l(e.resolutionList,(function(e){return t("el-option",{key:e,attrs:{label:e,value:e}})})),1)],1)],1)],1),t("el-form-item",{attrs:{label:"RTSP路径",prop:"rtspPath"}},[t("el-input",{attrs:{clearable:"",maxlength:"128",placeholder:"如 /Streaming/Channels/101"},model:{value:e.form.rtspPath,callback:function(t){e.$set(e.form,"rtspPath",t)},expression:"form.rtspPath"}})],1),t("el-form-item",{attrs:{label:"画面放大倍率",prop:"zoomPercent"}},[t("el-select",{staticClass:"ele-block",attrs:{clearable:"",placeholder:"跟随网关设置"},model:{value:e.form.zoomPercent,callback:function(t){e.$set(e.form,"zoomPercent",t)},expression:"form.zoomPercent"}},e._l(e.zoomOptions,(function(e){return t("el-option",{key:e,attrs:{value:e,label:e+"%"}})})),1),t("div",{staticClass:"camera-zoom-tip"}
1,[e._v(" 留空则跟随所属网关的通配值。单独设置后以此处为准,适用于该机位距离通道特别远或特别近的情况。 ")])],1),t("el-form-item",{attrs:{label:"摄像机用户名",prop:"cameraUsername"}},[t("el-input",{attrs:{clearable:"",maxlength:"64",placeholder:"请输入摄像机用户名"},model:{value:e.form.cameraUsername,callback:function(t){e.$set(e.form,"cameraUsername",t)},expression:"form.cameraUsername"}})],1),t("el-form-item",{attrs:{label:"摄像机密码",prop:"cameraPassword"}},[t("el-input",{attrs:{clearable:"","show-password":"",maxlength:"64",placeholder:e.isUpdate?"留空则保持原密码":"请输入摄像机密码"},model:{value:e.form.cameraPassword,callback:function(t){e.$set(e.form,"cameraPassword",t)},expression:"form.cameraPassword"}}),e.isUpdate&&e.passwordConfigured?t("span",{staticClass:"pwd-tip"},[e._v("已配置密码,留空则不修改")]):e._e()],1),t("el-form-item",{attrs:{label:"备注",prop:"remark"}},[t("el-input",{attrs:{clearable:"",type:"textarea",autosize:{minRows:3,maxRows:6},maxlength:"200",placeholder:"请输入备注"},model:{value:e.form.remark,callback:function(t){e.$set(e.form,"remark",t)},expression:"form.remark"}})],1)],1)],1)},s=[],o=a(59377),n={name:"SensorlessCameraEdit",props:{visible:Boolean,data:Object,passageGroupId:[String,Number],groupOptions:{type:Array,default:()=>[]}},data(){const e={id:null,passageGroupId:null,cameraName:"",cameraSn:"",ipAddress:"",rtspPort:554,rtspPath:"",resolution:"",cameraUsername:"",cameraPassword:"",enabled:1,zoomPercent:null,remark:""};return{defaultForm:e,form:{...e},resolutionList:["1920x1080","2560x1440","1280x720","640x480"],zoomOptions:[100,110,120,130,140,150,160,170,180,190,200],passwordConfigured:!1,rules:{passageGroupId:[{required:!0,message:"请选择所属设备组",trigger:"change"}],cameraName:[{required:!0,message:"请输入摄像机名称",trigger:"blur"}],cameraSn:[{required:!0,message:"请输入摄像机序列号",trigger:"blur"}]},loading:!1,isUpdate:!1}},methods:{save(){this.$refs.form.validate((e=>{if(!e)return!1;this.loading=!0;const t={id:this.form.id,passageGroupId:this.form.passageGroupId,cameraName:this.form.cameraName,cameraSn:this.form.cameraSn,ipAddress:this.form.ipAddress,rtspPort:this.form.rtspPort,rtspPath:this.form.rtspPath,resolution:this.form.resolution,cameraUsername:this.form.cameraUsername,enabled:this.form.enabled,zoomPercent:this.form.zoomPercent,remark:this.form.remark};this.form.cameraPassword&&(t.cameraPassword=this.form.cameraPassword);const a=this.isUpdate?o.H4:o.vV;a(t).then((e=>{this.loading=!1,this.$message.success(e||"保存成功"),this.updateVisible(!1),this.$emit("done")})).catch((()=>{this.loading=!1}))}))},updateVisible(e){this.$emit("update:visible",e)}},watch:{visible(e){e?this.data?(this.isUpdate=!0,this.$util.assignObject(this.form,{...this.data}),this.passwordConfigured=!!this.data.passwordConfigured,this.form.cameraPassword=this.data.cameraPassword||""):(this.isUpdate=!1,this.passwordConfigured=!1,this.form={...this.defaultForm,passageGroupId:this.passageGroupId}):(this.$refs.form&&this.$refs.form.clearValidate(),this.form={...this.defaultForm})}}},l=n,i=a(1001),c=(0,i.Z)(l,r,s,!1,null,"1c9df5e8",null),d=c.exports},81013:function(e,t,a){a.r(t),a.d(t,{default:function(){return u}});var r=function(){var e=this,t=e._self._c;return t("ele-modal",{attrs:{width:"540px",visible:e.visible,"close-on-click-modal":!1,title:e.isUpdate?"编辑网关":"新增网关"},on:{"update:visible":e.updateVisible},scopedSlots:e._u([{key:"footer",fn:function(){return[t("el-button",{on:{click:function(t){return e.updateVisible(!1)}}},[e._v("取消")]),t("el-button",{attrs:{type:"primary",loading:e.loading},on:{click:e.save}},[e._v("保存")])]},proxy:!0}])},[t("el-form",{ref:"form",attrs:{model:e.form,rules:e.rules,"label-suffix":":","label-width":"auto"}},[t("el-form-item",{attrs:{label:"绑定学校/安装位置",prop:"installationId"}},[t("ele-tree-select",{staticClass:"ele-block",attrs:{defaultExpandAll:"",valueKey:"id",data:e.installationTree,placeholder:"请选择安装位置"},model:{value:e.form.installationId,callback:function(t){e.$set(e.form,"installationId",t)},expression:"form.installationId"}})],1),t("el-form-item",{attrs:{label:"网关名称",prop:"gatewayName"}},[t("el-input",{attrs:{clearable:"",maxlength:"50",placeholder:"请输入网关名称"},model:{value:e.form.gatewayName,callback:function(t){e.$set(e.form,"gatewayName",t)},expression:"form.gatewayName"}})],1),t("el-form-item",{attrs:{label:"网关序列号",prop:"gatewaySn"}},[t("el-input",{attrs:{clearable:"",maxlength:"64",placeholder:"请输入网关序列号"},model:{value:e.form.gatewaySn,callback:function(t){e.$set(e.form,"gatewaySn",t)},expression:"form.gatewaySn"}})],1),t("el-form-item",{attrs:{label:"IP地址",prop:"ipAddress"}},[t("el-input",{attrs:{clearable:"",maxlength:"64",placeholder:"请输入IP地址"},model:{value:e.form.ipAddress,callback:function(t){e.$set(e.form,"ipAddress",t)},expression:"form.ipAddress"}})],1),t("el-form-item",{attrs:{label:"下发所有人员",prop:"deployAllPeople"}},[t("el-radio-group",{model:{value:e.form.deployAllPeople,callback:function(t){e.$set(e.form,"deployAllPeople",t)},expression:"form.deployAllPeople"}},[t("el-radio",{attrs:{label:1}},[e._v("是")]),t("el-radio",{attrs:{label:2}},[e._v(" 否 "),t("el-tooltip",{attrs:{effect:"dark",content:"选择“否”则仅下发所选人员",placement:"top"}},[t("i",{staticClass:"el-icon-question"})])],1)],1)],1),t("el-form-item",{attrs:{label:"人脸相似度阈值",prop:"matchThresholdPercent"}}
1,[t("el-select",{staticClass:"ele-block",model:{value:e.form.matchThresholdPercent,callback:function(t){e.$set(e.form,"matchThresholdPercent",t)},expression:"form.matchThresholdPercent"}},e._l(e.thresholdOptions,(function(e){return t("el-option",{key:e,attrs:{value:e,label:e+"%"}})})),1),t("div",{staticClass:"threshold-tip"},[e._v(" 抓拍人脸与底库照片的相似度达到该值才判定为同一人。数值越高越严格,误认少但漏认多;越低越宽松,反之。默认 40%,实测常用区间为 40%~48%,超过 50% 会明显漏认,请结合现场识别情况小幅调整。 ")])],1),t("el-form-item",{attrs:{label:"画面放大倍率",prop:"zoomPercent"}},[t("el-select",{staticClass:"ele-block",model:{value:e.form.zoomPercent,callback:function(t){e.$set(e.form,"zoomPercent",t)},expression:"form.zoomPercent"}},e._l(e.zoomOptions,(function(e){return t("el-option",{key:e,attrs:{value:e,label:e+"%"}})})),1),t("div",{staticClass:"threshold-tip"},[e._v(' 该网关下摄像机的通配值,摄像机可单独设置覆盖。100% 使用整幅画面;数值越大越"拉近",仅取画面中间区域送识别,人脸更大但可视范围变窄,走在两侧的人可能拍不到。 ')])],1),t("el-form-item",{attrs:{label:"视频存储时长(天)",prop:"videoRetentionDays"}},[t("el-input-number",{staticClass:"ele-fluid ele-text-left",attrs:{min:0,max:3650,precision:0,"controls-position":"right",placeholder:"默认30"},model:{value:e.form.videoRetentionDays,callback:function(t){e.$set(e.form,"videoRetentionDays",t)},expression:"form.videoRetentionDays"}})],1),t("el-form-item",{attrs:{label:"照片存储时长(天)",prop:"photoRetentionDays"}},[t("el-input-number",{staticClass:"ele-fluid ele-text-left",attrs:{min:0,max:3650,precision:0,"controls-position":"right",placeholder:"默认30"},model:{value:e.form.photoRetentionDays,callback:function(t){e.$set(e.form,"photoRetentionDays",t)},expression:"form.photoRetentionDays"}})],1),t("el-form-item",{attrs:{label:"备注",prop:"remark"}},[t("el-input",{attrs:{clearable:"",type:"textarea",autosize:{minRows:3,maxRows:6},maxlength:"200",placeholder:"请输入备注"},model:{value:e.form.remark,callback:function(t){e.$set(e.form,"remark",t)},expression:"form.remark"}})],1)],1)],1)},s=[],o=a(59377),n=a(93238),l={name:"SensorlessGatewayEdit",props:{visible:Boolean,data:Object,campusId:String},data(){const e={id:null,installationId:"",gatewayName:"",gatewaySn:"",ipAddress:"",deployAllPeople:1,enabled:1,matchThresholdPercent:40,zoomPercent:100,videoRetentionDays:30,photoRetentionDays:30,remark:""},t=[40,42,44,46,48,50,55,60,70,80,90,100];return{defaultForm:e,form:{...e},installationTree:[],baseThresholdOptions:t,thresholdOptions:[...t],zoomOptions:[100,110,120,130,140,150,160,170,180,190,200],rules:{gatewayName:[{required:!0,message:"请输入网关名称",trigger:"blur"}],gatewaySn:[{required:!0,message:"请输入网关序列号",trigger:"blur"}],deployAllPeople:[{required:!0,message:"请选择是否下发所有人员",trigger:"change"}],matchThresholdPercent:[{required:!0,type:"number",message:"请选择人脸相似度阈值",trigger:"change"}],videoRetentionDays:[{required:!0,type:"number",min:0,message:"请输入非负的视频存储时长",trigger:"blur"}],photoRetentionDays:[{required:!0,type:"number",min:0,message:"请输入非负的照片存储时长",trigger:"blur"}]},loading:!1,isUpdate:!1}},methods:{ensureThresholdOption(e){if("number"!==typeof e||Number.isNaN(e))return this.thresholdOptions=[...this.baseThresholdOptions],void(this.form.matchThresholdPercent=this.defaultForm.matchThresholdPercent);this.thresholdOptions=this.baseThresholdOptions.includes(e)?[...this.baseThresholdOptions]:[...this.baseThresholdOptions,e].sort(((e,t)=>e-t))},async getInstallationTree(){try{this.installationTree=await(0,n.$C)({campusId:this.campusId})||[]}catch(e){this.installationTree=[]}},save(){this.$refs.form.validate((e=>{if(!e)return!1;this.loading=!0;const t={id:this.form.id,installationId:this.form.installationId,gatewayName:this.form.gatewayName,gatewaySn:this.form.gatewaySn,ipAddress:this.form.ipAddress,deployAllPeople:this.form.deployAllPeople,enabled:this.form.enabled,matchThresholdPercent:this.form.matchThresholdPercent,zoomPercent:this.form.zoomPercent,videoRetentionDays:this.form.videoRetentionDays,photoRetentionDays:this.form.photoRetentionDays,remark:this.form.remark},a=this.isUpdate?o.WN:o._s;a(t).then((e=>{if(this.loading=!1,this.updateVisible(!1),this.isUpdate)this.$message.success("保存成功");else{const a=e&&(e.gatewaySecret||e.secret);a?this.$emit("secret",{name:t.gatewayName,gatewaySecret:a}):this.$message.success("新增成功")}this.$emit("done")})).catch((()=>{this.loading=!1}))}))},updateVisible(e){this.$emit("update:visible",e)}},watch:{visible(e){e?(this.getInstallationTree(),this.data?(this.isUpdate=!0,this.$util.assignObject(this.form,{...this.data}),null==this.form.videoRetentionDays&&(this.form.videoRetentionDays=30),null==this.form.photoRetentionDays&&(this.form.photoRetentionDays=30),this.ensureThresholdOption(this.form.matchThresholdPercent)):(this.isUpdate=!1,this.form={...this.defaultForm},this.thresholdOptions=[...this.baseThresholdOptions])):(this.$refs.form&&this.$refs.form.clearValidate(),this.form={...this.defaultForm},this.thresholdOptions=[...this.baseThresholdOptions])}}},i=l,c=a(1001),d=(0,c.Z)(i,r,s,!1,null,"cbf7c894",null),u=d.exports},79462:function(e,t,a){a.r(t),a.d(t,{default:function(){return p}});var r=function(){var e=this,t=e._self._c;return t("ele-modal",{attrs:{width:"600px",visible:e.visible,"close-on-click-modal":!1,title:e.isUpdate?"编辑设备组":"新增设备组"},on:{"update:visible":e.updateVisible},scopedSlots:e._u([{key:"footer",fn:function(){return[t("el-button",{on:{click:function(t){return e.updateVisible(!1)}}},[e._v("取消")]),t("el-button",{attrs:{type:"primary",loading:e.loading},on:{click:e.save}},[e._v("保存")])]},proxy:!0}])},[t("el-form",{ref:"form",attrs:{model:e.form,rules:e.rules,"label-suffix":":","label-width":"150px"}},[t("el-form-item",{attrs:{label:"所属网关"}},[t("el-input",{attrs:{value:e.gatewayName,disabled:""}})],1),t("el-form-item",{attrs:{label:"设备组名称",prop:"groupName"}},[t("el-input",{attrs:{clearable:"",maxlength:"50",placeholder:"请输入设备组名称"},model:{value:e.form.groupName,callback:function(t){e.$set(e.form,"groupName",t)},expression:"form.groupName"}})],1),t("el-form-item",{attrs:{label:"设备组类型",prop:"groupType"}},[t("el-select",{staticClass:"ele-block",attrs:{placeholder:"请选择设备组类型"},model:{value:e.form.groupType,callback:function(t){e.$set(e.form,"groupType",t)},expression:"form.groupType"}},[t("el-option",{attrs:{value:1,label:"到离校考勤"}}),t("el-option",{attrs:{value:2,label:"宿舍考勤"}}),t("el-option",{attrs:{value:3,label:"校园监控"}}),t("el-option",{attrs:{value:4,label:"无感考勤"}})],1)],1),e.showHostelBinding?t("el-form-item",{attrs:{label:"所属宿舍楼",prop:"hostelId"}},[t("el-select",{staticClass:"ele-block",attrs:{clearable:"",placeholder:"请选择所属宿舍楼"}
1,model:{value:e.form.hostelId,callback:function(t){e.$set(e.form,"hostelId",t)},expression:"form.hostelId"}},e._l(e.hostelList,(function(e){return t("el-option",{key:e.id,attrs:{label:e.label,value:e.id}})})),1),t("div",{staticClass:"dedup-tip"},[e._v(" 归寝考勤按宿舍楼匹配设备,不选则该设备组的识别记录不会计入归寝 ")])],1):e._e(),t("el-form-item",{attrs:{label:"方向",prop:"direction"}},[t("el-radio-group",{model:{value:e.form.direction,callback:function(t){e.$set(e.form,"direction",t)},expression:"form.direction"}},[t("el-radio",{attrs:{label:1}},[e._v("进")]),t("el-radio",{attrs:{label:2}},[e._v("出")]),t("el-radio",{attrs:{label:3}},[e._v("双向")])],1)],1),t("el-form-item",{attrs:{label:"是否开启出入推送",prop:"pushEnabled"}},[t("el-radio-group",{model:{value:e.form.pushEnabled,callback:function(t){e.$set(e.form,"pushEnabled",t)},expression:"form.pushEnabled"}},[t("el-radio",{attrs:{label:1}},[e._v("是")]),t("el-radio",{attrs:{label:2}},[e._v("否")])],1)],1),t("el-form-item",{attrs:{label:"重复抓拍过滤(秒)",prop:"dedupWindowSeconds"}},[t("el-input-number",{staticClass:"ele-fluid ele-text-left",attrs:{min:0,max:86400,"controls-position":"right",placeholder:"去重窗口秒数"},model:{value:e.form.dedupWindowSeconds,callback:function(t){e.$set(e.form,"dedupWindowSeconds",t)},expression:"form.dedupWindowSeconds"}}),t("span",{staticClass:"dedup-tip"},[e._v("同一人在该秒数内的重复抓拍将被过滤,默认30")])],1),t("el-form-item",{attrs:{label:"备注",prop:"remark"}},[t("el-input",{attrs:{clearable:"",type:"textarea",autosize:{minRows:3,maxRows:6},maxlength:"200",placeholder:"请输入备注"},model:{value:e.form.remark,callback:function(t){e.$set(e.form,"remark",t)},expression:"form.remark"}})],1)],1)],1)},s=[],o=(a(21703),a(59377)),n=a(32174);const l=2,i=4;var c={name:"SensorlessGroupEdit",props:{visible:Boolean,data:Object,gatewayId:[String,Number],gatewayName:String,campusId:[String,Number]},data(){const e={id:null,gatewayId:null,groupName:"",groupType:4,hostelId:null,direction:1,pushEnabled:1,dedupWindowSeconds:30,enabled:1,remark:""};return{defaultForm:e,form:{...e},hostelList:[],rules:{groupName:[{required:!0,message:"请输入设备组名称",trigger:"blur"}],groupType:[{required:!0,message:"请选择设备组类型",trigger:"change"}],direction:[{required:!0,message:"请选择方向",trigger:"change"}],hostelId:[{validator:(e,t,a)=>this.validateHostelId(e,t,a),trigger:"change"}]},loading:!1,isUpdate:!1}},computed:{isHostelGroup(){return this.form.groupType===l},showHostelBinding(){return this.form.groupType===l||this.form.groupType===i}},methods:{validateHostelId(e,t,a){this.form.groupType!==l||null!==t&&void 0!==t&&""!==t?a():a(new Error("宿舍考勤设备组必须选择所属宿舍楼"))},async loadHostelList(){try{const e=await(0,n.Gi)({campusId:this.campusId});this.hostelList=e||[]}catch(e){this.hostelList=[]}},save(){this.$refs.form.validate((e=>{if(!e)return!1;this.loading=!0;const t={id:this.form.id,gatewayId:this.gatewayId,groupName:this.form.groupName,groupType:this.form.groupType,hostelId:this.showHostelBinding?this.form.hostelId:null,direction:this.form.direction,pushEnabled:this.form.pushEnabled,dedupWindowSeconds:this.form.dedupWindowSeconds,enabled:this.form.enabled,remark:this.form.remark},a=this.isUpdate?o.MU:o.GF;a(t).then((e=>{this.loading=!1,this.$message.success(e||"保存成功"),this.updateVisible(!1),this.$emit("done")})).catch((()=>{this.loading=!1}))}))},updateVisible(e){this.$emit("update:visible",e)}},watch:{visible(e){e?(this.loadHostelList(),this.data?(this.isUpdate=!0,this.$util.assignObject(this.form,{...this.data})):(this.isUpdate=!1,this.form={...this.defaultForm,gatewayId:this.gatewayId})):(this.$refs.form&&this.$refs.form.clearValidate(),this.form={...this.defaultForm})}}},d=c,u=a(1001),m=(0,u.Z)(d,r,s,!1,null,"7fcaf338",null),p=m.exports},11743:function(e,t,a){a.r(t),a.d(t,{default:function(){return c}});var r=function(){var e=this,t=e._self._c;return t("ele-modal",{attrs:{width:"480px",visible:e.visible,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":!1,title:"网关新增成功"},on:{"update:visible":e.updateVisible},scopedSlots:e._u([{key:"footer",fn:function(){return[t("el-button",{attrs:{type:"primary",icon:"el-icon-document-copy"},on:{click:e.copySecret}},[e._v("复制密钥")]),t("el-button",{on:{click:function(t){return e.updateVisible(!1)}}},[e._v("我已保存,关闭")])]},proxy:!0}])},[t("el-alert",{attrs:{type:"warning",closable:!1,"show-icon":"",title:"网关密钥ä
1»…显示一次,请立即复制并妥善保存,关闭后将无法再次查看。"}}),t("div",{staticClass:"secret-box"},[t("div",{staticClass:"secret-label"},[e._v("网关名称")]),t("div",{staticClass:"secret-value"},[e._v(e._s(e.name||"-"))])]),t("div",{staticClass:"secret-box"},[t("div",{staticClass:"secret-label"},[e._v("网关密钥(gatewaySecret)")]),t("div",{staticClass:"secret-value secret-code"},[e._v(e._s(e.gatewaySecret))])])],1)},s=[],o={name:"SensorlessSecretDialog",props:{visible:Boolean,name:String,gatewaySecret:String},methods:{copySecret(){this.gatewaySecret&&this.$copyText(this.gatewaySecret).then((()=>{this.$message.success("已复制到剪贴板")})).catch((()=>{this.$message.error("复制失败,请手动复制")}))},updateVisible(e){this.$emit("update:visible",e)}}},n=o,l=a(1001),i=(0,l.Z)(n,r,s,!1,null,"04691e38",null),c=i.exports},2094:function(e,t,a){a.r(t),a.d(t,{default:function(){return f}});var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"ele-body"},[t("el-card",{attrs:{shadow:"never"}},[t("ele-pro-table",{ref:"table",attrs:{"row-key":"rowKey",indent:20,columns:e.columns,datasource:e.datasource,"need-page":!1,"default-expand-all":"","tree-props":{children:"children"}},scopedSlots:e._u([{key:"toolbar",fn:function(){return[t("div",{staticStyle:{display:"flex","align-items":"center","flex-wrap":"wrap"}},[t("SelectCampus",{directives:[{name:"show",rawName:"v-show",value:e.schoolsInfo?.campusList?.length>1,expression:"schoolsInfo?.campusList?.length > 1"}],attrs:{campusId:e.campusId},on:{"update:campusId":function(t){e.campusId=t},"update:campus-id":function(t){e.campusId=t},done:e.reload}}),t("el-button",{staticClass:"ele-btn-icon",attrs:{size:"small"},on:{click:function(t){return e.toggleExpand(!0)}}},[e._v(" 展开全部 ")]),t("el-button",{staticClass:"ele-btn-icon",attrs:{size:"small"},on:{click:function(t){return e.toggleExpand(!1)}}},[e._v(" 折叠全部 ")]),t("el-button",{staticClass:"ele-btn-icon",attrs:{size:"small",type:"primary",icon:"el-icon-plus"},on:{click:function(t){return e.openGateway(null)}}},[e._v(" 手动新增网关 ")])],1)]},proxy:!0},{key:"name",fn:function({row:a}){return[t("span",{staticClass:"node-tag",class:"node-tag--"+a.nodeType},[e._v(e._s(e.nodeTagText(a)))]),t("span",[e._v(e._s(e.nodeName(a)))]),"gateway"===a.nodeType?t("el-tag",{staticStyle:{"margin-left":"6px"},attrs:{size:"mini",type:1===a.registerStatus?"success":"info"}},[e._v(" "+e._s(1===a.registerStatus?"已注册":"未注册")+" ")]):e._e(),2==a.enabled?t("el-tag",{staticStyle:{"margin-left":"6px"},attrs:{size:"mini",type:"danger"}},[e._v(" 已停用 ")]):e._e()]}},{key:"sn",fn:function({row:t}){return[e._v(" "+e._s("gateway"===t.nodeType?t.gatewaySn||"-":"camera"===t.nodeType&&t.cameraSn||"-")+" ")]}},{key:"ip",fn:function({row:t}){return[e._v(" "+e._s("group"===t.nodeType?"-":t.ipAddress||"-")+" ")]}},{key:"config",fn:function({row:a}){return["gateway"===a.nodeType?[e._v(" 下发所有人员:"+e._s(["","是","否"][a.deployAllPeople]||"-")+" "),t("el-divider",{attrs:{direction:"vertical"}}),e._v(" 相似度:"+e._s(null==a.matchThresholdPercent?40:a.matchThresholdPercent)+"% "),t("el-divider",{attrs:{direction:"vertical"}}),e._v(" 放大:"+e._s(null==a.zoomPercent?100:a.zoomPercent)+"% "),t("el-divider",{attrs:{direction:"vertical"}}),e._v(" 存储:视频"+e._s(null==a.videoRetentionDays?30:a.videoRetentionDays)+"天 / 照片"+e._s(null==a.photoRetentionDays?30:a.photoRetentionDays)+"天 ")]:"group"===a.nodeType?[t("span",[e._v(e._s(e.groupTypeText[a.groupType]||"-"))]),2===a.groupType||4===a.groupType?[t("el-divider",{attrs:{direction:"vertical"}}),t("span",{class:{"group-unbound":!a.hostelId}},[e._v(" "+e._s(a.hostelName||"未绑定宿舍楼")+" ")])]:e._e(),t("el-divider",{attrs:{direction:"vertical"}}),t("span",[e._v(e._s(e.directionText[a.direction]||"-"))]),t("el-divider",{attrs:{direction:"vertical"}}),t("span",[e._v("推送:"+e._s(["","是","否"][a.pushEnabled]||"-"))]),t("el-divider",{attrs:{direction:"vertical"}}),t("span",[e._v("去重:"+e._s(null==a.dedupWindowSeconds?30:a.dedupWindowSeconds)+"s")])]:[a.resolution?t("span",[e._v(e._s(a.resolution))]):e._e(
1),a.cameraUsername?t("span",[e._v("("+e._s(a.cameraUsername)+")")]):e._e(),a.resolution||a.cameraUsername?e._e():t("span",[e._v("-")]),null!=a.zoomPercent?[t("el-divider",{attrs:{direction:"vertical"}}),t("span",[e._v("放大:"+e._s(a.zoomPercent)+"%")])]:e._e()]]}},{key:"status",fn:function({row:a}){return["group"!==a.nodeType&&null!=a.onlineStatus?t("ele-dot",{attrs:{type:e.statusDotType[a.onlineStatus],text:e.statusText[a.onlineStatus]}}):t("span",[e._v("-")])]}},{key:"action",fn:function({row:a}){return["gateway"===a.nodeType?[t("el-link",{attrs:{type:"success",underline:!1},on:{click:function(t){return e.openGroup(null,a)}}},[e._v("新增设备组")]),t("el-link",{attrs:{type:"primary",underline:!1},on:{click:function(t){return e.openGateway(a)}}},[e._v("编辑")]),t("el-link",{attrs:{type:2==a.enabled?"warning":"info",underline:!1},on:{click:function(t){return e.toggleGateway(a)}}},[e._v(" "+e._s(2==a.enabled?"启用":"停用")+" ")]),t("el-popconfirm",{staticClass:"ele-action",attrs:{title:"确定要删除该网关吗?"},on:{confirm:function(t){return e.removeGateway(a)}},scopedSlots:e._u([{key:"reference",fn:function(){return[t("el-link",{attrs:{type:"danger",underline:!1}},[e._v("删除")])]},proxy:!0}],null,!0)})]:"group"===a.nodeType?[t("el-link",{attrs:{type:"success",underline:!1},on:{click:function(t){return e.openCamera(null,a)}}},[e._v("新增摄像机")]),t("el-link",{attrs:{type:"primary",underline:!1},on:{click:function(t){return e.openGroup(a)}}},[e._v("编辑")]),t("el-popconfirm",{staticClass:"ele-action",attrs:{title:"确定要删除该设备组吗?"},on:{confirm:function(t){return e.removeGroup(a)}},scopedSlots:e._u([{key:"reference",fn:function(){return[t("el-link",{attrs:{type:"danger",underline:!1}},[e._v("删除")])]},proxy:!0}],null,!0)})]:[t("el-link",{attrs:{type:"primary",underline:!1},on:{click:function(t){return e.openCamera(a)}}},[e._v("编辑")]),t("el-popconfirm",{staticClass:"ele-action",attrs:{title:"确定要删除该摄像机吗?"},on:{confirm:function(t){return e.removeCamera(a)}},scopedSlots:e._u([{key:"reference",fn:function(){return[t("el-link",{attrs:{type:"danger",underline:!1}},[e._v("删除")])]},proxy:!0}],null,!0)})]]}}])})],1),t("GatewayEdit",{attrs:{visible:e.showGateway,data:e.currentGateway,campusId:e.campusId},on:{"update:visible":function(t){e.showGateway=t},done:e.reload,secret:e.onSecret}}),t("GroupEdit",{attrs:{visible:e.showGroup,data:e.currentGroup,gatewayId:e.currentGatewayId,gatewayName:e.currentGatewayName,campusId:e.campusId},on:{"update:visible":function(t){e.showGroup=t},done:e.reload}}),t("CameraEdit",{attrs:{visible:e.showCamera,data:e.currentCamera,passageGroupId:e.currentGroupId,groupOptions:e.allGroups},on:{"update:visible":function(t){e.showCamera=t},done:e.reload}}),t("SecretDialog",{attrs:{visible:e.showSecret,name:e.secretData.name,gatewaySecret:e.secretData.gatewaySecret},on:{"update:visible":function(t){e.showSecret=t}}})],1)},s=[],o=a(20629),n=a(59377),l=a(81013),i=a(79462),c=a(10878),d=a(11743),u={name:"SensorlessDeviceManage",components:{GatewayEdit:l["default"],GroupEdit:i["default"],CameraEdit:c["default"],SecretDialog:d["default"]},data(){return{campusId:null,treeData:[],nodeTypeText:{gateway:"网关",group:"设备组",camera:"摄像机"},groupTypeText:{1:"到离校考勤",2:"宿舍考勤",3:"校园监控",4:"无感考勤"},directionText:{1:"进",2:"出",3:"双向"},statusText:["离线","在线"],statusDotType:["danger","success"],columns:[{columnKey:"name",label:"名称/设备",slot:"name",minWidth:260,showOverflowTooltip:!0},{columnKey:"sn",label:"序列号",slot:"sn",align:"center",minWidth:160,showOverflowTooltip:!0},{columnKey:"ip",label:"IP地址",slot:"ip",align:"center",minWidth:130},{columnKey:"config",label:"配置信息",slot:"config",align:"center",minWidth:260},{columnKey:"status",label:"状态",slot:"status",align:"center",minWidth:100},{prop:"remark",label:"备注",align:"center",minWidth:120,showOverflowTooltip:!0},{columnKey:"action",label:"操作",slot:"action",align:"center",width:280,fixed:"right"}],showGateway:!1,currentGateway:null,showGroup:!1,currentGroup:null,currentGatewayId:null,currentGatewayName:"",showCamera:!1,currentCamera:null,currentGroupId:null,
1showSecret:!1,secretData:{name:"",gatewaySecret:""}}},computed:{...(0,o.Se)(["schoolsInfo"]),allGroups(){const e=[];return(this.treeData||[]).forEach((t=>{(t.children||[]).forEach((a=>{e.push({id:a.id,name:`${a.groupName}(${t.gatewayName})`})}))})),e}},created(){this.campusId=this.schoolsInfo?.campusList?.[0]?.id||null},methods:{nodeName(e){return"gateway"===e.nodeType?e.gatewayName||"-":"group"===e.nodeType?e.groupName||"-":e.cameraName||"-"},nodeTagText(e){const t=this.nodeTypeText[e.nodeType];if("group"!==e.nodeType)return t;const a=this.groupTypeText[e.groupType];return a?`${t}-${a}`:t},async datasource(){const e=await(0,n.BB)({campusId:this.campusId});return this.treeData=this.buildTree(e||[]),this.treeData},buildTree(e){return(e||[]).map((e=>{const t=(e.passageGroups||[]).map((t=>{const a=(t.cameras||[]).map((a=>({...a,nodeType:"camera",rowKey:`camera-${a.id}`,gatewayId:e.id,passageGroupId:t.id})));return{...t,nodeType:"group",rowKey:`group-${t.id}`,gatewayId:e.id,children:a}}));return{...e,nodeType:"gateway",rowKey:`gateway-${e.id}`,children:t}}))},reload(){this.$refs.table&&this.$refs.table.reload()},toggleExpand(e){this.$refs.table&&this.$refs.table.toggleRowExpansionAll(e)},openGateway(e){this.currentGateway=e,this.showGateway=!0},onSecret(e){this.secretData={name:e.name,gatewaySecret:e.gatewaySecret},this.showSecret=!0},toggleGateway(e){const t=2==e.enabled?1:2,a=2==t?"确定要停用该网关吗?":"确定要启用该网关吗?";this.$confirm(a,"提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((async()=>{const a={id:e.id,installationId:e.installationId,gatewayName:e.gatewayName,gatewaySn:e.gatewaySn,ipAddress:e.ipAddress,deployAllPeople:e.deployAllPeople,matchThresholdPercent:e.matchThresholdPercent,zoomPercent:e.zoomPercent,videoRetentionDays:e.videoRetentionDays,photoRetentionDays:e.photoRetentionDays,remark:e.remark,enabled:t};await(0,n.WN)(a),this.$message.success("操作成功"),this.reload()})).catch((()=>{}))},removeGateway(e){const t=this.$loading({lock:!0});(0,n.bD)(e.id).then((e=>{t.close(),this.$message.success(e||"删除成功"),this.reload()})).catch((()=>t.close()))},openGroup(e,t){this.currentGroup=e;const a=e?e.gatewayId:t.id;this.currentGatewayId=a;const r=(this.treeData||[]).find((e=>e.id===a));this.currentGatewayName=r?r.gatewayName:t?t.gatewayName:"",this.showGroup=!0},removeGroup(e){const t=this.$loading({lock:!0});(0,n.yp)(e.id).then((e=>{t.close(),this.$message.success(e||"删除成功"),this.reload()})).catch((()=>t.close()))},openCamera(e,t){this.currentCamera=e,this.currentGroupId=e?e.passageGroupId:t.id,this.showCamera=!0},removeCamera(e){const t=this.$loading({lock:!0});(0,n.UQ)(e.id).then((e=>{t.close(),this.$message.success(e||"删除成功"),this.reload()})).catch((()=>t.close()))}}},m=u,p=a(1001),h=(0,p.Z)(m,r,s,!1,null,"08f0104e",null),f=h.exports},32174:function(e,t,a){a.d(t,{Ey:function(){return c},Gi:function(){return o},Ix:function(){return m},KD:function(){return i},LM:function(){return d},N6:function(){return u},Yl:function(){return n},m:function(){return s},su:function(){return l}});a(21703);var r=a(65310);async function s(e){const t=await r.Z.get("school/hostel/all-campus-tree",{params:e});return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function o(e){const t=await r.Z.get("school/hostel/tree",{params:e});return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function n(e){const t=await r.Z.get("/school/hostel/lazy",{params:e});return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function l(e){const t=await r.Z.post("school/teacher/page",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function i(e){const t=await r.Z.post("school/hostel",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function c(e){const t=await r.Z.put("school/hostel",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function d(e){const t=await r.Z["delete"](`school/hostel/${e}`);
1return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function u(e){const t=await r.Z.post("school/hostel/batch",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function m(e){const t=await r.Z.get("/school/device/page",{params:e});return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}},59377:function(e,t,a){a.d(t,{BB:function(){return s},GF:function(){return c},H4:function(){return p},MU:function(){return d},UQ:function(){return h},WN:function(){return n},_s:function(){return o},bD:function(){return l},po:function(){return i},vV:function(){return m},yp:function(){return u}});a(21703);var r=a(65310);async function s(e){const t=await r.Z.get("school/sensorless/device/tree",{params:e});return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function o(e){const t=await r.Z.post("school/sensorless/device/gateway",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function n(e){const t=await r.Z.put("school/sensorless/device/gateway",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function l(e){const t=await r.Z["delete"](`school/sensorless/device/gateway/${e}`);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function i(e){const t=await r.Z.post(`school/sensorless/device/gateway/${e}/clear-local-face`);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function c(e){const t=await r.Z.post("school/sensorless/device/passage-group",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function d(e){const t=await r.Z.put("school/sensorless/device/passage-group",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function u(e){const t=await r.Z["delete"](`school/sensorless/device/passage-group/${e}`);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function m(e){const t=await r.Z.post("school/sensorless/device/camera",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function p(e){const t=await r.Z.put("school/sensorless/device/camera",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function h(e){const t=await r.Z["delete"](`school/sensorless/device/camera/${e}`);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}},93238:function(e,t,a){a.d(t,{$C:function(){return l},Bn:function(){return s},T_:function(){return n},jN:function(){return i},jk:function(){return o}});a(21703);var r=a(65310);async function s(e){const t=await r.Z.post("school/buildings/batch",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function o(e){const t=await r.Z.post("school/buildings",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function n(e){const t=await r.Z.put("school/buildings",e);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function l(e){const t=await r.Z.get("school/buildings/tree",{params:e});return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}async function i(e){const t=await r.Z["delete"](`school/buildings/${e}`);return 200===t.data.code?t.data.data:Promise.reject(new Error(t.data.message))}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.