feat: 新增多厂商安防箱支持并重构相关逻辑
- 新增安防箱适配器模块,统一封装不同厂商的设备操作逻辑 - 拆分原有安防箱API为beidian、ningtech两个厂商的专属实现 - 扩展安防箱诊断信息接口,补充设备ID、版本等元数据字段 - 更新安防箱设备卡片组件,支持自动识别厂商并适配空开控制逻辑
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
export * from './nvr';
|
||||
export * from './security-box';
|
||||
export * from './switch';
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
import { rebootSecurityBoxBeidianApi, rebootSecurityBoxNingTechApi, turnCircuitStatusBeidianApi, turnCircuitStatusNingTechApi, type NdmSecurityBoxResultVO } from '@/apis';
|
||||
import { objectEntries } from '@vueuse/core';
|
||||
|
||||
const UNSUPPORTED_SECURITY_BOX_VENDOR = '不支持的安防箱厂商';
|
||||
|
||||
export const SECURITY_BOX_VENDOR_LITERALS = {
|
||||
beidian: 'beidian',
|
||||
ningtech: 'ningtech',
|
||||
} as const;
|
||||
|
||||
export type SecurityBoxVendor = keyof typeof SECURITY_BOX_VENDOR_LITERALS;
|
||||
|
||||
export const resolveSecurityBoxVendor = (vendor?: string) => {
|
||||
const entry = objectEntries(SECURITY_BOX_VENDOR_LITERALS).find(([, value]) => value === vendor);
|
||||
return entry?.at(0);
|
||||
};
|
||||
|
||||
export const normalizeSecurityBoxWriteCommunity = (ndmDevice: NdmSecurityBoxResultVO, vendor?: string) => {
|
||||
const resolved = resolveSecurityBoxVendor(vendor);
|
||||
if (resolved === SECURITY_BOX_VENDOR_LITERALS.beidian) {
|
||||
const community = ndmDevice.community;
|
||||
if (!community) throw new Error('团体字符串不存在');
|
||||
return community;
|
||||
}
|
||||
if (resolved === SECURITY_BOX_VENDOR_LITERALS.ningtech) {
|
||||
const community = ndmDevice.writeCommunity;
|
||||
if (!community) throw new Error('团体字符串(写)不存在');
|
||||
return community;
|
||||
}
|
||||
throw new Error(UNSUPPORTED_SECURITY_BOX_VENDOR);
|
||||
};
|
||||
|
||||
export const normalizeSecurityBoxCircuitIndex = (index: number, vendor?: string) => {
|
||||
const resolved = resolveSecurityBoxVendor(vendor);
|
||||
if (resolved === SECURITY_BOX_VENDOR_LITERALS.beidian) {
|
||||
return index;
|
||||
}
|
||||
if (resolved === SECURITY_BOX_VENDOR_LITERALS.ningtech) {
|
||||
return index + 1;
|
||||
}
|
||||
throw new Error(UNSUPPORTED_SECURITY_BOX_VENDOR);
|
||||
};
|
||||
|
||||
export const dispatchTurnCircuitStatusApi = (vendor?: string) => {
|
||||
const resolved = resolveSecurityBoxVendor(vendor);
|
||||
if (resolved === SECURITY_BOX_VENDOR_LITERALS.beidian) {
|
||||
return turnCircuitStatusBeidianApi;
|
||||
}
|
||||
if (resolved === SECURITY_BOX_VENDOR_LITERALS.ningtech) {
|
||||
return turnCircuitStatusNingTechApi;
|
||||
}
|
||||
throw new Error(UNSUPPORTED_SECURITY_BOX_VENDOR);
|
||||
};
|
||||
|
||||
export const dispatchRebootSecurityBoxApi = (vendor?: string) => {
|
||||
const resolved = resolveSecurityBoxVendor(vendor);
|
||||
if (resolved === SECURITY_BOX_VENDOR_LITERALS.beidian) {
|
||||
return rebootSecurityBoxBeidianApi;
|
||||
}
|
||||
if (resolved === SECURITY_BOX_VENDOR_LITERALS.ningtech) {
|
||||
return rebootSecurityBoxNingTechApi;
|
||||
}
|
||||
throw new Error(UNSUPPORTED_SECURITY_BOX_VENDOR);
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
export * from './adapter';
|
||||
Reference in New Issue
Block a user