import { AreaControllerApi, DeviceApi } from '../api/device.js'; class DeviceService { /** * 获取所有设备和区域主控的列表,并将其合并为树形结构所需的数据 * @returns {Promise} 合并后的设备列表 */ async getDevices() { try { // 1. 分别、正确地调用接口获取区域主控和所有设备 const [areaControllersResponse, allDevicesResponse] = await Promise.all([ AreaControllerApi.list(), // 现在调用 GET /api/v1/area-controllers DeviceApi.list() // 现在调用 GET /api/v1/devices ]); // 2. 处理区域主控数据 const areaControllers = (areaControllersResponse.data || []).map(controller => ({ ...controller, type: 'area_controller' // 添加类型标识,用于前端区分 })); // 3. 处理普通设备数据 const devices = (allDevicesResponse.data || []) // 注意:后端的 /api/v1/devices 可能也包含了区域主控,前端需要做筛选 .filter(device => !areaControllers.some(ac => ac.id === device.id && device.type === 'area_controller')) .map(device => ({ ...device, type: 'device', // 添加类型标识 // 使用 area_controller_id 作为 parent_id 以构建树形结构 parent_id: device.area_controller_id })); // 4. 合并数据,返回给组件 return [...areaControllers, ...devices]; } catch (error) { console.error('获取设备列表失败:', error); throw error; } } /** * 创建新设备或区域主控 * @param {Object} data - 设备或区域主控信息,包含type字段 * @returns {Promise} 创建结果 */ 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} 详情 */ 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} 更新后的信息 */ 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} */ 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();