diff --git a/Sense/ui/src/views/sense/admission/Admission.vue b/Sense/ui/src/views/sense/admission/Admission.vue index 4d42e85..2257e28 100644 --- a/Sense/ui/src/views/sense/admission/Admission.vue +++ b/Sense/ui/src/views/sense/admission/Admission.vue @@ -7,7 +7,7 @@ - +
地址中不能包含用户名或密码;凭据来自设备管理中的安全配置。
检查设备与视频发现设备
@@ -38,15 +38,17 @@ import { onMounted, reactive, ref } from 'vue' import { ElMessage } from 'element-plus' import { listDevices } from '../../../api/sense/device' -import { discoverDevices, probeDevice } from '../../../api/sense/admission' +import { admissionResult, discoverDevices, probeDevice } from '../../../api/sense/admission' const devices=ref([]),probing=ref(false),discovering=ref(false),discoveryDialog=ref(false),discovered=ref([]),formRef=ref() const form=reactive({device_id:'',address:''}),result=reactive({}) const rules={device_id:[{required:true,message:'请选择设备',trigger:'change'}],address:[{required:true,message:'请输入 ONVIF 服务地址',trigger:'blur'},{validator:(_r,v,done)=>v.includes('@')?done(new Error('地址中不能包含凭据')):done(),trigger:'blur'}]} function statusLabel(value){return({ready:'接入正常',profile_failed:'部分码流失败',authentication_failed:'认证失败',timeout:'响应超时',clock_skew:'需要校时',unreachable:'设备不可达'})[value]||value} async function loadDevices(){devices.value=(await listDevices({page:1,page_size:100})).items.filter(item=>item.modality==='video'&&item.status!=='disabled')} +async function loadSavedResult(){Object.keys(result).forEach(key=>delete result[key]);if(!form.device_id)return;try{Object.assign(result,await admissionResult(form.device_id))}catch{/* 尚未接入时保持空状态 */}} async function probe(){const valid=await formRef.value?.validate().catch(()=>false);if(!valid)return;probing.value=true;try{Object.assign(result,await probeDevice(form))}catch(error){ElMessage.error(error.message||'检查失败')}finally{probing.value=false}} async function discover(){discovering.value=true;try{discovered.value=(await discoverDevices()).items||[];discoveryDialog.value=true}catch(error){ElMessage.warning(error.message||'未配置获准发现网卡')}finally{discovering.value=false}} function useAddress(value){form.address=value;discoveryDialog.value=false} onMounted(loadDevices) +