Compare commits

...

5 Commits

Author SHA1 Message Date
9c6467176c 修bug 2025-10-20 15:15:43 +08:00
fdc568753c 修bug 2025-10-20 15:07:30 +08:00
a3e9465b88 修bug 2025-10-20 14:55:34 +08:00
96c36f9ce1 修bug 2025-10-20 14:54:52 +08:00
c68dff6123 修bug 2025-10-20 14:52:25 +08:00
9 changed files with 153 additions and 55 deletions

View File

@@ -1,5 +1,7 @@
import http from '../utils/http';
// --- Device API Functions ---
/**
* 获取系统中所有设备的列表
* @returns {Promise<*>}
@@ -54,3 +56,72 @@ export const deleteDevice = (id) => {
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: getAreaControllers,
create: createAreaController,
getById: getAreaControllerById,
update: updateAreaController,
delete: deleteAreaController
};
// DeviceApi 封装
export const DeviceApi = {
list: getDevices,
create: createDevice,
getById: getDeviceById,
update: updateDevice,
delete: deleteDevice
};

View File

@@ -4,7 +4,7 @@ import http from '../utils/http';
* 获取系统中所有设备模板的列表
* @returns {Promise<*>}
*/
export const getDeviceTemplates = () => {
const getDeviceTemplates = () => {
return http.get('/api/v1/device-templates');
};
@@ -13,7 +13,7 @@ export const getDeviceTemplates = () => {
* @param {object} deviceTemplateData - 设备模板信息,对应 dto.CreateDeviceTemplateRequest
* @returns {Promise<*>}
*/
export const createDeviceTemplate = (deviceTemplateData) => {
const createDeviceTemplate = (deviceTemplateData) => {
return http.post('/api/v1/device-templates', deviceTemplateData);
};
@@ -22,7 +22,7 @@ export const createDeviceTemplate = (deviceTemplateData) => {
* @param {string} id - 设备模板ID
* @returns {Promise<*>}
*/
export const getDeviceTemplateById = (id) => {
const getDeviceTemplateById = (id) => {
return http.get(`/api/v1/device-templates/${id}`);
};
@@ -32,7 +32,7 @@ export const getDeviceTemplateById = (id) => {
* @param {object} deviceTemplateData - 要更新的设备模板信息,对应 dto.UpdateDeviceTemplateRequest
* @returns {Promise<*>}
*/
export const updateDeviceTemplate = (id, deviceTemplateData) => {
const updateDeviceTemplate = (id, deviceTemplateData) => {
return http.put(`/api/v1/device-templates/${id}`, deviceTemplateData);
};
@@ -41,6 +41,14 @@ export const updateDeviceTemplate = (id, deviceTemplateData) => {
* @param {string} id - 设备模板ID
* @returns {Promise<*>}
*/
export const deleteDeviceTemplate = (id) => {
const deleteDeviceTemplate = (id) => {
return http.delete(`/api/v1/device-templates/${id}`);
};
export const DeviceTemplateApi = {
getDeviceTemplates,
createDeviceTemplate,
getDeviceTemplateById,
updateDeviceTemplate,
deleteDeviceTemplate,
};

View File

@@ -1,7 +1,7 @@
import { AreaControllerApi, DeviceApi } from './device.js';
import PlanApi from './plan.js';
import UserApi from './user.js';
import DeviceTemplateApi from './deviceTemplate.js'; // 导入设备模板API
import { PlanApi } from './plan.js';
import { UserApi } from './user.js';
import { DeviceTemplateApi } from './deviceTemplate.js'; // 导入设备模板API
/**
* API客户端

View File

@@ -4,7 +4,7 @@ import http from '../utils/http';
* 获取所有计划的列表
* @returns {Promise<*>}
*/
export const getPlans = () => {
const getPlans = () => {
return http.get('/api/v1/plans');
};
@@ -13,7 +13,7 @@ export const getPlans = () => {
* @param {object} planData - 计划信息,对应 dto.CreatePlanRequest
* @returns {Promise<*>}
*/
export const createPlan = (planData) => {
const createPlan = (planData) => {
return http.post('/api/v1/plans', planData);
};
@@ -22,7 +22,7 @@ export const createPlan = (planData) => {
* @param {number} id - 计划ID
* @returns {Promise<*>}
*/
export const getPlanById = (id) => {
const getPlanById = (id) => {
return http.get(`/api/v1/plans/${id}`);
};
@@ -32,7 +32,7 @@ export const getPlanById = (id) => {
* @param {object} planData - 更新后的计划信息,对应 dto.UpdatePlanRequest
* @returns {Promise<*>}
*/
export const updatePlan = (id, planData) => {
const updatePlan = (id, planData) => {
return http.put(`/api/v1/plans/${id}`, planData);
};
@@ -41,7 +41,7 @@ export const updatePlan = (id, planData) => {
* @param {number} id - 计划ID
* @returns {Promise<*>}
*/
export const deletePlan = (id) => {
const deletePlan = (id) => {
return http.delete(`/api/v1/plans/${id}`);
};
@@ -50,7 +50,7 @@ export const deletePlan = (id) => {
* @param {number} id - 计划ID
* @returns {Promise<*>}
*/
export const startPlan = (id) => {
const startPlan = (id) => {
return http.post(`/api/v1/plans/${id}/start`);
};
@@ -59,6 +59,16 @@ export const startPlan = (id) => {
* @param {number} id - 计划ID
* @returns {Promise<*>}
*/
export const stopPlan = (id) => {
const stopPlan = (id) => {
return http.post(`/api/v1/plans/${id}/stop`);
};
export const PlanApi = {
getPlans,
createPlan,
getPlanById,
updatePlan,
deletePlan,
startPlan,
stopPlan,
};

View File

@@ -5,7 +5,7 @@ import http from '../utils/http';
* @param {object} userData - 用户信息,对应 dto.CreateUserRequest
* @returns {Promise<*>}
*/
export const createUser = (userData) => {
const createUser = (userData) => {
return http.post('/api/v1/users', userData);
};
@@ -14,7 +14,7 @@ export const createUser = (userData) => {
* @param {object} credentials - 登录凭证,对应 dto.LoginRequest
* @returns {Promise<*>}
*/
export const login = (credentials) => {
const login = (credentials) => {
return http.post('/api/v1/users/login', credentials);
};
@@ -24,6 +24,12 @@ export const login = (credentials) => {
* @param {object} params - 查询参数
* @returns {Promise<*>}
*/
export const getUserHistory = (id, params) => {
const getUserHistory = (id, params) => {
return http.get(`/api/v1/users/${id}/history`, { params });
};
export const UserApi = {
createUser,
login,
getUserHistory,
};

View File

@@ -265,7 +265,7 @@ export default {
this.loading = true;
this.error = null;
try {
const response = await apiClient.plans.get(this.planId);
const response = await apiClient.plans.getPlanById(this.planId);
this.plan = {
...response.data,
sub_plans: response.data.sub_plans || [],
@@ -320,7 +320,7 @@ export default {
delete submitData.status;
console.log("PlanDetail: Submitting data", submitData);
await apiClient.plans.update(this.planId, submitData);
await apiClient.plans.updatePlan(this.planId, submitData);
ElMessage.success('计划内容已保存');
this.isEditingContent = false;
this.fetchPlan();
@@ -355,7 +355,7 @@ export default {
},
async fetchAvailablePlans() {
try {
const response = await apiClient.plans.list();
const response = await apiClient.plans.getPlans(); // 更正此处
this.availablePlans = response.data.plans.filter(p =>
p.id !== this.planId
);

View File

@@ -158,7 +158,7 @@ export default {
this.error = null;
try {
const response = await apiClient.plans.list();
const response = await apiClient.plans.getPlans(); // 更正此处
let fetchedPlans = response.data?.plans || [];
// Default sort by ID ascending
fetchedPlans.sort((a, b) => a.id - b.id);
@@ -262,7 +262,7 @@ export default {
type: 'warning'
});
await apiClient.plans.delete(plan.id);
await apiClient.plans.deletePlan(plan.id);
this.$message.success('删除成功');
await this.loadPlans();
} catch (err) {
@@ -275,7 +275,7 @@ export default {
async startPlan(plan) {
try {
this.startingPlanId = plan.id;
await apiClient.plans.start(plan.id);
await apiClient.plans.startPlan(plan.id);
this.$message.success('计划启动成功');
await this.loadPlans();
} catch (err) {
@@ -288,7 +288,7 @@ export default {
async stopPlan(plan) {
try {
this.stoppingPlanId = plan.id;
await apiClient.plans.stop(plan.id);
await apiClient.plans.stopPlan(plan.id);
this.$message.success('计划停止成功');
await this.loadPlans();
} catch (err) {
@@ -303,7 +303,7 @@ export default {
try {
if (this.isEdit) {
// 编辑计划
await apiClient.plans.update(planData.id, planData);
await apiClient.plans.updatePlan(planData.id, planData);
this.$message.success('计划更新成功');
} else {
// 添加新计划
@@ -312,7 +312,7 @@ export default {
content_type: 'tasks' // 默认使用任务类型
};
await apiClient.plans.create(planRequest);
await apiClient.plans.createPlan(planRequest);
this.$message.success('计划添加成功');
}

View File

@@ -1,4 +1,4 @@
import {AreaControllerApi, DeviceApi} from '../api/device.js';
import { AreaControllerApi, DeviceApi } from '../api/device.js';
class DeviceService {
/**
@@ -7,22 +7,26 @@ class DeviceService {
*/
async getDevices() {
try {
// 1. 并行发起两个独立的API请求一个获取区域主控一个获取普通设备
const [areaControllersResponse, devicesResponse] = await Promise.all([
AreaControllerApi.list(),
DeviceApi.list()
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' // 添加类型标识
type: 'area_controller'
}));
// 3. 处理普通设备数据,并添加'type'和'parent_id'以构建树形结构
const devices = (devicesResponse.data || []).map(device => ({
...device,
type: 'device', // 添加类型标识
parent_id: device.area_controller_id // 适配前端树形结构
type: 'device',
parent_id: device.area_controller_id
}));
// 4. 合并两份数据形成完整的列表返回给UI组件
return [...areaControllers, ...devices];
} catch (error) {
console.error('获取设备列表失败:', error);
@@ -32,17 +36,16 @@ class DeviceService {
/**
* 创建新设备或区域主控
* @param {Object} deviceData 设备或区域主控信息包含type字段
* @param {Object} data - 设备或区域主控信息包含type字段
* @returns {Promise<Object>} 创建结果
*/
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) {
@@ -53,17 +56,17 @@ class DeviceService {
/**
* 获取设备或区域主控详情
* @param {number} id ID
* @param {string} type 类型 ('area_controller' 或 'device')
* @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.get(id);
const response = await AreaControllerApi.getById(id);
return {...response.data, type: 'area_controller'};
} else {
const response = await DeviceApi.get(id);
const response = await DeviceApi.getById(id);
return {...response.data, type: 'device', parent_id: response.data.area_controller_id};
}
} catch (error) {
@@ -74,17 +77,17 @@ class DeviceService {
/**
* 更新设备或区域主控信息
* @param {number} id ID
* @param {Object} deviceData 更新的设备或区域主控信息包含type字段
* @param {number} id - ID
* @param {Object} data - 更新的设备或区域主控信息包含type字段
* @returns {Promise<Object>} 更新后的信息
*/
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) {
@@ -95,7 +98,7 @@ class DeviceService {
/**
* 删除设备或区域主控
* @param {Object} device 包含id和type属性的设备或区域主控对象
* @param {Object} device - 包含id和type属性的设备或区域主控对象
* @returns {Promise<void>}
*/
async deleteDevice(device) {

View File

@@ -7,7 +7,7 @@ class DeviceTemplateService {
*/
async getDeviceTemplates() {
try {
const response = await apiClient.deviceTemplates.list();
const response = await apiClient.deviceTemplates.getDeviceTemplates(); // 更正此处
return response || [];
} catch (error) {
console.error('获取设备模板列表失败:', error);
@@ -22,7 +22,7 @@ class DeviceTemplateService {
*/
async createDeviceTemplate(deviceTemplateData) {
try {
const response = await apiClient.deviceTemplates.create(deviceTemplateData);
const response = await apiClient.deviceTemplates.createDeviceTemplate(deviceTemplateData);
return response.data;
} catch (error) {
console.error('创建设备模板失败:', error);
@@ -37,7 +37,7 @@ class DeviceTemplateService {
*/
async getDeviceTemplate(id) {
try {
const response = await apiClient.deviceTemplates.get(id);
const response = await apiClient.deviceTemplates.getDeviceTemplateById(id);
return response.data;
} catch (error) {
console.error('获取设备模板详情失败:', error);
@@ -53,7 +53,7 @@ class DeviceTemplateService {
*/
async updateDeviceTemplate(id, deviceTemplateData) {
try {
const response = await apiClient.deviceTemplates.update(id, deviceTemplateData);
const response = await apiClient.deviceTemplates.updateDeviceTemplate(id, deviceTemplateData);
return response.data;
} catch (error) {
console.error('更新设备模板失败:', error);
@@ -68,7 +68,7 @@ class DeviceTemplateService {
*/
async deleteDeviceTemplate(id) {
try {
await apiClient.deviceTemplates.delete(id);
await apiClient.deviceTemplates.deleteDeviceTemplate(id);
} catch (error) {
console.error('删除设备模板失败:', error);
throw error;