feat: 设备树添加管理功能

- 新增设备导入、导出、删除功能及相关API
- 封装设备管理逻辑,拆分设备选择与设备管理逻辑
- 添加右键菜单支持设备管理操作
This commit is contained in:
yangsy
2025-12-17 13:50:26 +08:00
parent 6183bfd4d7
commit c408d875f4
13 changed files with 576 additions and 109 deletions

View File

@@ -0,0 +1,32 @@
import {
deleteAlarmHostApi,
deleteCameraApi,
deleteDecoderApi,
deleteKeyboardApi,
deleteMediaServerApi,
deleteNvrApi,
deleteSecurityBoxApi,
deleteSwitchApi,
deleteVideoServerApi,
type Station,
} from '@/apis';
import { DEVICE_TYPE_LITERALS, type DeviceType } from '@/enums';
export const deleteDeviceApi = async (deviceType: DeviceType, id: string, options?: { stationCode?: Station['code']; signal?: AbortSignal }) => {
const apiRecord = {
[DEVICE_TYPE_LITERALS.ndmAlarmHost]: deleteAlarmHostApi,
[DEVICE_TYPE_LITERALS.ndmCamera]: deleteCameraApi,
[DEVICE_TYPE_LITERALS.ndmDecoder]: deleteDecoderApi,
[DEVICE_TYPE_LITERALS.ndmKeyboard]: deleteKeyboardApi,
[DEVICE_TYPE_LITERALS.ndmMediaServer]: deleteMediaServerApi,
[DEVICE_TYPE_LITERALS.ndmNvr]: deleteNvrApi,
[DEVICE_TYPE_LITERALS.ndmSecurityBox]: deleteSecurityBoxApi,
[DEVICE_TYPE_LITERALS.ndmSwitch]: deleteSwitchApi,
[DEVICE_TYPE_LITERALS.ndmVideoServer]: deleteVideoServerApi,
};
const deleteApi = apiRecord[deviceType];
if (!deleteApi) throw new Error('接口不存在');
return deleteApi([id], options);
};

View File

@@ -0,0 +1,34 @@
import {
exportAlarmHostApi,
exportCameraApi,
exportDecoderApi,
exportKeyboardApi,
exportMediaServerApi,
exportNvrApi,
exportSecurityBoxApi,
exportSwitchApi,
exportVideoServerApi,
type NdmDevicePageQuery,
type PageParams,
type Station,
} from '@/apis';
import { DEVICE_TYPE_LITERALS, type DeviceType } from '@/enums';
export const exportDeviceApi = async (deviceType: DeviceType, pageQuery: PageParams<NdmDevicePageQuery>, options?: { stationCode?: Station['code']; signal?: AbortSignal }) => {
const apiRecord = {
[DEVICE_TYPE_LITERALS.ndmAlarmHost]: exportAlarmHostApi,
[DEVICE_TYPE_LITERALS.ndmCamera]: exportCameraApi,
[DEVICE_TYPE_LITERALS.ndmDecoder]: exportDecoderApi,
[DEVICE_TYPE_LITERALS.ndmKeyboard]: exportKeyboardApi,
[DEVICE_TYPE_LITERALS.ndmMediaServer]: exportMediaServerApi,
[DEVICE_TYPE_LITERALS.ndmNvr]: exportNvrApi,
[DEVICE_TYPE_LITERALS.ndmSecurityBox]: exportSecurityBoxApi,
[DEVICE_TYPE_LITERALS.ndmSwitch]: exportSwitchApi,
[DEVICE_TYPE_LITERALS.ndmVideoServer]: exportVideoServerApi,
};
const exportApi = apiRecord[deviceType];
if (!exportApi) throw new Error('接口不存在');
return exportApi(pageQuery, options);
};

View File

@@ -0,0 +1,32 @@
import {
importAlarmHostApi,
importCameraApi,
importDecoderApi,
importKeyboardApi,
importMediaServerApi,
importNvrApi,
importSecurityBoxApi,
importSwitchApi,
importVideoServerApi,
type Station,
} from '@/apis';
import { DEVICE_TYPE_LITERALS, type DeviceType } from '@/enums';
export const importDeviceApi = async (deviceType: DeviceType, file: File, options?: { stationCode?: Station['code']; signal?: AbortSignal }) => {
const apiRecord = {
[DEVICE_TYPE_LITERALS.ndmAlarmHost]: importAlarmHostApi,
[DEVICE_TYPE_LITERALS.ndmCamera]: importCameraApi,
[DEVICE_TYPE_LITERALS.ndmDecoder]: importDecoderApi,
[DEVICE_TYPE_LITERALS.ndmKeyboard]: importKeyboardApi,
[DEVICE_TYPE_LITERALS.ndmMediaServer]: importMediaServerApi,
[DEVICE_TYPE_LITERALS.ndmNvr]: importNvrApi,
[DEVICE_TYPE_LITERALS.ndmSecurityBox]: importSecurityBoxApi,
[DEVICE_TYPE_LITERALS.ndmSwitch]: importSwitchApi,
[DEVICE_TYPE_LITERALS.ndmVideoServer]: importVideoServerApi,
};
const importApi = apiRecord[deviceType];
if (!importApi) throw new Error('接口不存在');
return importApi(file, options);
};

View File

@@ -1,2 +1,5 @@
export * from './delete-device';
export * from './detail-device';
export * from './export-device';
export * from './import-device';
export * from './probe-device';