diff --git a/src/api/device.js b/src/api/device.js index 97255fe6..16fd36cf 100644 --- a/src/api/device.js +++ b/src/api/device.js @@ -1,5 +1,7 @@ import http from '../utils/http'; +// --- Device API Functions --- + /** * 获取系统中所有设备的列表 * @returns {Promise<*>} @@ -55,41 +57,71 @@ export const manualControlDevice = (id, manualControlData) => { return http.post(`/api/v1/devices/manual-control/${id}`, manualControlData); }; + +// --- AreaController API Functions --- + +/** + * 获取系统中所有区域主控的列表 + * @returns {Promise<*>} + */ +export const getAreaControllers = () => { + return http.get('/api/v1/area-controllers'); +}; + +/** + * 创建一个新区域主控 + * @param {object} areaControllerData - 区域主控信息 + * @returns {Promise<*>} + */ +export const createAreaController = (areaControllerData) => { + return http.post('/api/v1/area-controllers', areaControllerData); +}; + +/** + * 根据ID获取单个区域主控的详细信息 + * @param {string} id - 区域主控ID + * @returns {Promise<*>} + */ +export const getAreaControllerById = (id) => { + return http.get(`/api/v1/area-controllers/${id}`); +}; + +/** + * 根据ID更新一个已存在的区域主控信息 + * @param {string} id - 区域主控ID + * @param {object} areaControllerData - 要更新的区域主控信息 + * @returns {Promise<*>} + */ +export const updateAreaController = (id, areaControllerData) => { + return http.put(`/api/v1/area-controllers/${id}`, areaControllerData); +}; + +/** + * 根据ID删除一个区域主控 + * @param {string} id - 区域主控ID + * @returns {Promise<*>} + */ +export const deleteAreaController = (id) => { + return http.delete(`/api/v1/area-controllers/${id}`); +}; + + +// --- API Wrappers --- + // AreaControllerApi 封装 export const AreaControllerApi = { - list: async () => { - const response = await getDevices(); - return { - ...response, - data: response.data.filter(device => device.type === 'area_controller') - }; - }, - create: (deviceData) => { - return createDevice({ ...deviceData, type: 'area_controller' }); - }, - getById: (id) => { - return getDeviceById(id); - }, - update: (id, deviceData) => { - return updateDevice(id, { ...deviceData, type: 'area_controller' }); - }, - delete: (id) => { - return deleteDevice(id); - } + list: getAreaControllers, + create: createAreaController, + getById: getAreaControllerById, + update: updateAreaController, + delete: deleteAreaController }; // DeviceApi 封装 export const DeviceApi = { - create: (deviceData) => { - return createDevice({ ...deviceData, type: 'device' }); - }, - getById: (id) => { - return getDeviceById(id); - }, - update: (id, deviceData) => { - return updateDevice(id, { ...deviceData, type: 'device' }); - }, - delete: (id) => { - return deleteDevice(id); - } + list: getDevices, + create: createDevice, + getById: getDeviceById, + update: updateDevice, + delete: deleteDevice }; diff --git a/src/services/deviceService.js b/src/services/deviceService.js index a9cfebb1..776314fe 100644 --- a/src/services/deviceService.js +++ b/src/services/deviceService.js @@ -1,4 +1,4 @@ -import {AreaControllerApi, DeviceApi, getDevices} from '../api/device.js'; +import { AreaControllerApi, DeviceApi } from '../api/device.js'; class DeviceService { /** @@ -7,24 +7,30 @@ class DeviceService { */ async getDevices() { try { + // 1. 分别、正确地调用接口获取区域主控和所有设备 const [areaControllersResponse, allDevicesResponse] = await Promise.all([ - AreaControllerApi.list(), - getDevices() // 使用通用的getDevices函数获取所有设备 + AreaControllerApi.list(), // 现在调用 GET /api/v1/area-controllers + DeviceApi.list() // 现在调用 GET /api/v1/devices ]); + // 2. 处理区域主控数据 const areaControllers = (areaControllersResponse.data || []).map(controller => ({ ...controller, - type: 'area_controller' // 添加类型标识 + type: 'area_controller' // 添加类型标识,用于前端区分 })); + // 3. 处理普通设备数据 const devices = (allDevicesResponse.data || []) - .filter(device => device.type === 'device') // 过滤出普通设备 + // 注意:后端的 /api/v1/devices 可能也包含了区域主控,前端需要做筛选 + .filter(device => !areaControllers.some(ac => ac.id === device.id && device.type === 'area_controller')) .map(device => ({ ...device, type: 'device', // 添加类型标识 - parent_id: device.area_controller_id // 适配前端树形结构 + // 使用 area_controller_id 作为 parent_id 以构建树形结构 + parent_id: device.area_controller_id })); + // 4. 合并数据,返回给组件 return [...areaControllers, ...devices]; } catch (error) { console.error('获取设备列表失败:', error); @@ -34,17 +40,16 @@ class DeviceService { /** * 创建新设备或区域主控 - * @param {Object} deviceData 设备或区域主控信息,包含type字段 + * @param {Object} data - 设备或区域主控信息,包含type字段 * @returns {Promise} 创建结果 */ - async createDevice(deviceData) { + async createDevice(data) { try { - if (deviceData.type === 'area_controller') { - const response = await AreaControllerApi.create(deviceData); + if (data.type === 'area_controller') { + const response = await AreaControllerApi.create(data); return {...response.data, type: 'area_controller'}; } else { - // 默认创建普通设备 - const response = await DeviceApi.create(deviceData); + const response = await DeviceApi.create(data); return {...response.data, type: 'device', parent_id: response.data.area_controller_id}; } } catch (error) { @@ -55,8 +60,8 @@ class DeviceService { /** * 获取设备或区域主控详情 - * @param {number} id ID - * @param {string} type 类型 ('area_controller' 或 'device') + * @param {number} id - ID + * @param {string} type - 类型 ('area_controller' 或 'device') * @returns {Promise} 详情 */ async getDevice(id, type) { @@ -76,17 +81,17 @@ class DeviceService { /** * 更新设备或区域主控信息 - * @param {number} id ID - * @param {Object} deviceData 更新的设备或区域主控信息,包含type字段 + * @param {number} id - ID + * @param {Object} data - 更新的设备或区域主控信息,包含type字段 * @returns {Promise} 更新后的信息 */ - async updateDevice(id, deviceData) { + async updateDevice(id, data) { try { - if (deviceData.type === 'area_controller') { - const response = await AreaControllerApi.update(id, deviceData); + 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, deviceData); + const response = await DeviceApi.update(id, data); return {...response.data, type: 'device', parent_id: response.data.area_controller_id}; } } catch (error) { @@ -97,7 +102,7 @@ class DeviceService { /** * 删除设备或区域主控 - * @param {Object} device 包含id和type属性的设备或区域主控对象 + * @param {Object} device - 包含id和type属性的设备或区域主控对象 * @returns {Promise} */ async deleteDevice(device) {