Files
pig-farm-controller-fe/src/services/deviceService.js

119 lines
4.2 KiB
JavaScript
Raw Normal View History

2025-10-20 14:52:25 +08:00
import {AreaControllerApi, DeviceApi, getDevices} from '../api/device.js';
2025-09-19 14:25:20 +08:00
class DeviceService {
2025-10-01 00:29:21 +08:00
/**
* 获取所有设备和区域主控的列表并将其合并为树形结构所需的数据
* @returns {Promise<Array>} 合并后的设备列表
*/
async getDevices() {
try {
2025-10-20 14:52:25 +08:00
const [areaControllersResponse, allDevicesResponse] = await Promise.all([
2025-10-01 00:29:21 +08:00
AreaControllerApi.list(),
2025-10-20 14:52:25 +08:00
getDevices() // 使用通用的getDevices函数获取所有设备
2025-10-01 00:29:21 +08:00
]);
2025-10-01 00:29:21 +08:00
const areaControllers = (areaControllersResponse.data || []).map(controller => ({
...controller,
type: 'area_controller' // 添加类型标识
}));
2025-10-20 14:52:25 +08:00
const devices = (allDevicesResponse.data || [])
.filter(device => device.type === 'device') // 过滤出普通设备
.map(device => ({
...device,
type: 'device', // 添加类型标识
parent_id: device.area_controller_id // 适配前端树形结构
}));
2025-10-01 00:29:21 +08:00
return [...areaControllers, ...devices];
} catch (error) {
console.error('获取设备列表失败:', error);
throw error;
}
2025-09-19 14:25:20 +08:00
}
2025-10-01 00:29:21 +08:00
/**
* 创建新设备或区域主控
* @param {Object} deviceData 设备或区域主控信息包含type字段
* @returns {Promise<Object>} 创建结果
*/
async createDevice(deviceData) {
try {
if (deviceData.type === 'area_controller') {
const response = await AreaControllerApi.create(deviceData);
return {...response.data, type: 'area_controller'};
} else {
// 默认创建普通设备
const response = await DeviceApi.create(deviceData);
return {...response.data, type: 'device', parent_id: response.data.area_controller_id};
}
} catch (error) {
console.error('创建设备失败:', error);
throw error;
}
2025-09-19 14:25:20 +08:00
}
2025-10-01 00:29:21 +08:00
/**
* 获取设备或区域主控详情
* @param {number} id ID
* @param {string} type 类型 ('area_controller' 'device')
* @returns {Promise<Object>} 详情
*/
async getDevice(id, type) {
try {
if (type === 'area_controller') {
2025-10-20 14:52:25 +08:00
const response = await AreaControllerApi.getById(id);
2025-10-01 00:29:21 +08:00
return {...response.data, type: 'area_controller'};
} else {
2025-10-20 14:52:25 +08:00
const response = await DeviceApi.getById(id);
2025-10-01 00:29:21 +08:00
return {...response.data, type: 'device', parent_id: response.data.area_controller_id};
}
} catch (error) {
console.error('获取设备详情失败:', error);
throw error;
}
2025-09-19 23:56:30 +08:00
}
2025-10-01 00:29:21 +08:00
/**
* 更新设备或区域主控信息
* @param {number} id ID
* @param {Object} deviceData 更新的设备或区域主控信息包含type字段
* @returns {Promise<Object>} 更新后的信息
*/
async updateDevice(id, deviceData) {
try {
if (deviceData.type === 'area_controller') {
const response = await AreaControllerApi.update(id, deviceData);
return {...response.data, type: 'area_controller'};
} else {
const response = await DeviceApi.update(id, deviceData);
return {...response.data, type: 'device', parent_id: response.data.area_controller_id};
}
} catch (error) {
console.error('更新设备失败:', error);
throw error;
}
2025-09-19 14:25:20 +08:00
}
2025-10-01 00:29:21 +08:00
/**
* 删除设备或区域主控
* @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;
}
2025-09-19 14:25:20 +08:00
}
}
// 导出设备服务实例
export default new DeviceService();