Files
pig-farm-controller-fe/src/services/deviceService.js
2025-10-20 15:15:43 +08:00

120 lines
4.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { AreaControllerApi, DeviceApi } from '../api/device.js';
class DeviceService {
/**
* 获取所有设备和区域主控的列表,并将其合并为树形结构所需的数据
* @returns {Promise<Array>} 合并后的设备列表
*/
async getDevices() {
try {
// 1. 并行发起两个独立的API请求一个获取区域主控一个获取普通设备
const [areaControllersResponse, devicesResponse] = await Promise.all([
AreaControllerApi.list(), // 调用 GET /api/v1/area-controllers
DeviceApi.list() // 调用 GET /api/v1/devices
]);
// 2. 处理区域主控数据,并添加前端所需的'type'标识
const areaControllers = (areaControllersResponse.data || []).map(controller => ({
...controller,
type: 'area_controller'
}));
// 3. 处理普通设备数据,并添加'type'和'parent_id'以构建树形结构
const devices = (devicesResponse.data || []).map(device => ({
...device,
type: 'device',
parent_id: device.area_controller_id
}));
// 4. 合并两份数据形成完整的列表返回给UI组件
return [...areaControllers, ...devices];
} catch (error) {
console.error('获取设备列表失败:', error);
throw error;
}
}
/**
* 创建新设备或区域主控
* @param {Object} data - 设备或区域主控信息包含type字段
* @returns {Promise<Object>} 创建结果
*/
async createDevice(data) {
try {
if (data.type === 'area_controller') {
const response = await AreaControllerApi.create(data);
return {...response.data, type: 'area_controller'};
} else {
const response = await DeviceApi.create(data);
return {...response.data, type: 'device', parent_id: response.data.area_controller_id};
}
} catch (error) {
console.error('创建设备失败:', error);
throw error;
}
}
/**
* 获取设备或区域主控详情
* @param {number} id - ID
* @param {string} type - 类型 ('area_controller' 或 'device')
* @returns {Promise<Object>} 详情
*/
async getDevice(id, type) {
try {
if (type === 'area_controller') {
const response = await AreaControllerApi.getById(id);
return {...response.data, type: 'area_controller'};
} else {
const response = await DeviceApi.getById(id);
return {...response.data, type: 'device', parent_id: response.data.area_controller_id};
}
} catch (error) {
console.error('获取设备详情失败:', error);
throw error;
}
}
/**
* 更新设备或区域主控信息
* @param {number} id - ID
* @param {Object} data - 更新的设备或区域主控信息包含type字段
* @returns {Promise<Object>} 更新后的信息
*/
async updateDevice(id, data) {
try {
if (data.type === 'area_controller') {
const response = await AreaControllerApi.update(id, data);
return {...response.data, type: 'area_controller'};
} else {
const response = await DeviceApi.update(id, data);
return {...response.data, type: 'device', parent_id: response.data.area_controller_id};
}
} catch (error) {
console.error('更新设备失败:', error);
throw error;
}
}
/**
* 删除设备或区域主控
* @param {Object} device - 包含id和type属性的设备或区域主控对象
* @returns {Promise<void>}
*/
async deleteDevice(device) {
try {
if (device.type === 'area_controller') {
await AreaControllerApi.delete(device.id);
} else {
await DeviceApi.delete(device.id);
}
} catch (error) {
console.error('删除设备失败:', error);
throw error;
}
}
}
// 导出设备服务实例
export default new DeviceService();