This commit is contained in:
2025-10-01 00:29:21 +08:00
parent 5737973197
commit b3ab17660a
4 changed files with 108 additions and 101 deletions

View File

@@ -118,7 +118,6 @@ export default {
data.sort((a, b) => a.id - b.id); data.sort((a, b) => a.id - b.id);
this.allDevices = data; this.allDevices = data;
this.tableData = this.buildTreeData(data); this.tableData = this.buildTreeData(data);
console.log('Final tableData:', this.tableData); // 添加这行日志
this.originalTableData = [...this.tableData]; // 保存原始顺序 this.originalTableData = [...this.tableData]; // 保存原始顺序
} catch (err) { } catch (err) {
this.error = err.message || '未知错误'; this.error = err.message || '未知错误';

View File

@@ -104,8 +104,9 @@ export default {
this.loading = true; this.loading = true;
this.error = null; this.error = null;
try { try {
const data = await deviceTemplateService.getDeviceTemplates(); const response = await deviceTemplateService.getDeviceTemplates();
this.tableData = data; // 确保只将数组部分赋值给 tableData
this.tableData = response.data || [];
} catch (err) { } catch (err) {
this.error = err.message || '未知错误'; this.error = err.message || '未知错误';
console.error('加载设备模板列表失败:', err); console.error('加载设备模板列表失败:', err);

View File

@@ -1,115 +1,115 @@
import { AreaControllerApi, DeviceApi } from '../api/device.js'; import {AreaControllerApi, DeviceApi} from '../api/device.js';
class DeviceService { class DeviceService {
/** /**
* 获取所有设备和区域主控的列表,并将其合并为树形结构所需的数据 * 获取所有设备和区域主控的列表,并将其合并为树形结构所需的数据
* @returns {Promise<Array>} 合并后的设备列表 * @returns {Promise<Array>} 合并后的设备列表
*/ */
async getDevices() { async getDevices() {
try { try {
const [areaControllersResponse, devicesResponse] = await Promise.all([ const [areaControllersResponse, devicesResponse] = await Promise.all([
AreaControllerApi.list(), AreaControllerApi.list(),
DeviceApi.list() DeviceApi.list()
]); ]);
const areaControllers = (areaControllersResponse.data || []).map(controller => ({ const areaControllers = (areaControllersResponse.data || []).map(controller => ({
...controller, ...controller,
type: 'area_controller' // 添加类型标识 type: 'area_controller' // 添加类型标识
})); }));
const devices = (devicesResponse.data || []).map(device => ({ const devices = (devicesResponse.data || []).map(device => ({
...device, ...device,
type: 'device', // 添加类型标识 type: 'device', // 添加类型标识
parent_id: device.area_controller_id // 适配前端树形结构 parent_id: device.area_controller_id // 适配前端树形结构
})); }));
return [...areaControllers, ...devices]; return [...areaControllers, ...devices];
} catch (error) { } catch (error) {
console.error('获取设备列表失败:', error); console.error('获取设备列表失败:', error);
throw error; throw error;
}
} }
}
/** /**
* 创建新设备或区域主控 * 创建新设备或区域主控
* @param {Object} deviceData 设备或区域主控信息包含type字段 * @param {Object} deviceData 设备或区域主控信息包含type字段
* @returns {Promise<Object>} 创建结果 * @returns {Promise<Object>} 创建结果
*/ */
async createDevice(deviceData) { async createDevice(deviceData) {
try { try {
if (deviceData.type === 'area_controller') { if (deviceData.type === 'area_controller') {
const response = await AreaControllerApi.create(deviceData); const response = await AreaControllerApi.create(deviceData);
return { ...response.data, type: 'area_controller' }; return {...response.data, type: 'area_controller'};
} else { } else {
// 默认创建普通设备 // 默认创建普通设备
const response = await DeviceApi.create(deviceData); 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) {
console.error('创建设备失败:', error); console.error('创建设备失败:', error);
throw error; throw error;
}
} }
}
/** /**
* 获取设备或区域主控详情 * 获取设备或区域主控详情
* @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) {
try { try {
if (type === 'area_controller') { if (type === 'area_controller') {
const response = await AreaControllerApi.get(id); const response = await AreaControllerApi.get(id);
return { ...response.data, type: 'area_controller' }; return {...response.data, type: 'area_controller'};
} else { } else {
const response = await DeviceApi.get(id); const response = await DeviceApi.get(id);
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) {
console.error('获取设备详情失败:', error); console.error('获取设备详情失败:', error);
throw error; throw error;
}
} }
}
/** /**
* 更新设备或区域主控信息 * 更新设备或区域主控信息
* @param {number} id ID * @param {number} id ID
* @param {Object} deviceData 更新的设备或区域主控信息包含type字段 * @param {Object} deviceData 更新的设备或区域主控信息包含type字段
* @returns {Promise<Object>} 更新后的信息 * @returns {Promise<Object>} 更新后的信息
*/ */
async updateDevice(id, deviceData) { async updateDevice(id, deviceData) {
try { try {
if (deviceData.type === 'area_controller') { if (deviceData.type === 'area_controller') {
const response = await AreaControllerApi.update(id, deviceData); const response = await AreaControllerApi.update(id, deviceData);
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, 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) {
console.error('更新设备失败:', error); console.error('更新设备失败:', error);
throw error; throw error;
}
} }
}
/** /**
* 删除设备或区域主控 * 删除设备或区域主控
* @param {Object} device 包含id和type属性的设备或区域主控对象 * @param {Object} device 包含id和type属性的设备或区域主控对象
* @returns {Promise<void>} * @returns {Promise<void>}
*/ */
async deleteDevice(device) { async deleteDevice(device) {
try { try {
if (device.type === 'area_controller') { if (device.type === 'area_controller') {
await AreaControllerApi.delete(device.id); await AreaControllerApi.delete(device.id);
} else { } else {
await DeviceApi.delete(device.id); await DeviceApi.delete(device.id);
} }
} catch (error) { } catch (error) {
console.error('删除设备失败:', error); console.error('删除设备失败:', error);
throw error; throw error;
}
} }
}
} }
// 导出设备服务实例 // 导出设备服务实例

View File

@@ -1,6 +1,7 @@
const { VueLoaderPlugin } = require('vue-loader'); const { VueLoaderPlugin } = require('vue-loader');
const path = require('path'); const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack'); // 引入 webpack 模块
module.exports = (env, argv) => { module.exports = (env, argv) => {
const isDevelopment = argv.mode === 'development'; const isDevelopment = argv.mode === 'development';
@@ -38,6 +39,12 @@ module.exports = (env, argv) => {
new HtmlWebpackPlugin({ new HtmlWebpackPlugin({
template: './index.html', template: './index.html',
filename: 'index.html' filename: 'index.html'
}),
// 添加 Vue 特性标志的定义
new webpack.DefinePlugin({
__VUE_OPTIONS_API__: JSON.stringify(true),
__VUE_PROD_DEVTOOLS__: JSON.stringify(isDevelopment),
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: JSON.stringify(isDevelopment)
}) })
], ],
devServer: { devServer: {