修bug
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
import http from '../utils/http';
|
import http from '../utils/http';
|
||||||
|
|
||||||
|
// --- Device API Functions ---
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取系统中所有设备的列表
|
* 获取系统中所有设备的列表
|
||||||
* @returns {Promise<*>}
|
* @returns {Promise<*>}
|
||||||
@@ -55,41 +57,71 @@ export const manualControlDevice = (id, manualControlData) => {
|
|||||||
return http.post(`/api/v1/devices/manual-control/${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 封装
|
// AreaControllerApi 封装
|
||||||
export const AreaControllerApi = {
|
export const AreaControllerApi = {
|
||||||
list: async () => {
|
list: getAreaControllers,
|
||||||
const response = await getDevices();
|
create: createAreaController,
|
||||||
return {
|
getById: getAreaControllerById,
|
||||||
...response,
|
update: updateAreaController,
|
||||||
data: response.data.filter(device => device.type === 'area_controller')
|
delete: deleteAreaController
|
||||||
};
|
|
||||||
},
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// DeviceApi 封装
|
// DeviceApi 封装
|
||||||
export const DeviceApi = {
|
export const DeviceApi = {
|
||||||
create: (deviceData) => {
|
list: getDevices,
|
||||||
return createDevice({ ...deviceData, type: 'device' });
|
create: createDevice,
|
||||||
},
|
getById: getDeviceById,
|
||||||
getById: (id) => {
|
update: updateDevice,
|
||||||
return getDeviceById(id);
|
delete: deleteDevice
|
||||||
},
|
|
||||||
update: (id, deviceData) => {
|
|
||||||
return updateDevice(id, { ...deviceData, type: 'device' });
|
|
||||||
},
|
|
||||||
delete: (id) => {
|
|
||||||
return deleteDevice(id);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import {AreaControllerApi, DeviceApi, getDevices} from '../api/device.js';
|
import { AreaControllerApi, DeviceApi } from '../api/device.js';
|
||||||
|
|
||||||
class DeviceService {
|
class DeviceService {
|
||||||
/**
|
/**
|
||||||
@@ -7,24 +7,30 @@ class DeviceService {
|
|||||||
*/
|
*/
|
||||||
async getDevices() {
|
async getDevices() {
|
||||||
try {
|
try {
|
||||||
|
// 1. 分别、正确地调用接口获取区域主控和所有设备
|
||||||
const [areaControllersResponse, allDevicesResponse] = await Promise.all([
|
const [areaControllersResponse, allDevicesResponse] = await Promise.all([
|
||||||
AreaControllerApi.list(),
|
AreaControllerApi.list(), // 现在调用 GET /api/v1/area-controllers
|
||||||
getDevices() // 使用通用的getDevices函数获取所有设备
|
DeviceApi.list() // 现在调用 GET /api/v1/devices
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// 2. 处理区域主控数据
|
||||||
const areaControllers = (areaControllersResponse.data || []).map(controller => ({
|
const areaControllers = (areaControllersResponse.data || []).map(controller => ({
|
||||||
...controller,
|
...controller,
|
||||||
type: 'area_controller' // 添加类型标识
|
type: 'area_controller' // 添加类型标识,用于前端区分
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
// 3. 处理普通设备数据
|
||||||
const devices = (allDevicesResponse.data || [])
|
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 => ({
|
.map(device => ({
|
||||||
...device,
|
...device,
|
||||||
type: 'device', // 添加类型标识
|
type: 'device', // 添加类型标识
|
||||||
parent_id: device.area_controller_id // 适配前端树形结构
|
// 使用 area_controller_id 作为 parent_id 以构建树形结构
|
||||||
|
parent_id: device.area_controller_id
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
// 4. 合并数据,返回给组件
|
||||||
return [...areaControllers, ...devices];
|
return [...areaControllers, ...devices];
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取设备列表失败:', error);
|
console.error('获取设备列表失败:', error);
|
||||||
@@ -34,17 +40,16 @@ class DeviceService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建新设备或区域主控
|
* 创建新设备或区域主控
|
||||||
* @param {Object} deviceData 设备或区域主控信息,包含type字段
|
* @param {Object} data - 设备或区域主控信息,包含type字段
|
||||||
* @returns {Promise<Object>} 创建结果
|
* @returns {Promise<Object>} 创建结果
|
||||||
*/
|
*/
|
||||||
async createDevice(deviceData) {
|
async createDevice(data) {
|
||||||
try {
|
try {
|
||||||
if (deviceData.type === 'area_controller') {
|
if (data.type === 'area_controller') {
|
||||||
const response = await AreaControllerApi.create(deviceData);
|
const response = await AreaControllerApi.create(data);
|
||||||
return {...response.data, type: 'area_controller'};
|
return {...response.data, type: 'area_controller'};
|
||||||
} else {
|
} else {
|
||||||
// 默认创建普通设备
|
const response = await DeviceApi.create(data);
|
||||||
const response = await DeviceApi.create(deviceData);
|
|
||||||
return {...response.data, type: 'device', parent_id: response.data.area_controller_id};
|
return {...response.data, type: 'device', parent_id: response.data.area_controller_id};
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -55,8 +60,8 @@ class DeviceService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取设备或区域主控详情
|
* 获取设备或区域主控详情
|
||||||
* @param {number} id ID
|
* @param {number} id - ID
|
||||||
* @param {string} type 类型 ('area_controller' 或 'device')
|
* @param {string} type - 类型 ('area_controller' 或 'device')
|
||||||
* @returns {Promise<Object>} 详情
|
* @returns {Promise<Object>} 详情
|
||||||
*/
|
*/
|
||||||
async getDevice(id, type) {
|
async getDevice(id, type) {
|
||||||
@@ -76,17 +81,17 @@ class DeviceService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新设备或区域主控信息
|
* 更新设备或区域主控信息
|
||||||
* @param {number} id ID
|
* @param {number} id - ID
|
||||||
* @param {Object} deviceData 更新的设备或区域主控信息,包含type字段
|
* @param {Object} data - 更新的设备或区域主控信息,包含type字段
|
||||||
* @returns {Promise<Object>} 更新后的信息
|
* @returns {Promise<Object>} 更新后的信息
|
||||||
*/
|
*/
|
||||||
async updateDevice(id, deviceData) {
|
async updateDevice(id, data) {
|
||||||
try {
|
try {
|
||||||
if (deviceData.type === 'area_controller') {
|
if (data.type === 'area_controller') {
|
||||||
const response = await AreaControllerApi.update(id, deviceData);
|
const response = await AreaControllerApi.update(id, data);
|
||||||
return {...response.data, type: 'area_controller'};
|
return {...response.data, type: 'area_controller'};
|
||||||
} else {
|
} 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};
|
return {...response.data, type: 'device', parent_id: response.data.area_controller_id};
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -97,7 +102,7 @@ class DeviceService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除设备或区域主控
|
* 删除设备或区域主控
|
||||||
* @param {Object} device 包含id和type属性的设备或区域主控对象
|
* @param {Object} device - 包含id和type属性的设备或区域主控对象
|
||||||
* @returns {Promise<void>}
|
* @returns {Promise<void>}
|
||||||
*/
|
*/
|
||||||
async deleteDevice(device) {
|
async deleteDevice(device) {
|
||||||
|
|||||||
Reference in New Issue
Block a user